在 InnoDB 中執行 SELECT COUNT(*) FROM table 或帶條件 WHERE pk >= 0 時,預設走主鍵 (Clustered Index) 掃描,必須讀取完整行資料,大表極慢。實測發現,改用二級索引 (Secondary Index) 條件 WHERE secondary_col >= 0,速度顯著提升。
-- 慢:全表掃描主鍵
SELECT COUNT(*) FROM t WHERE id >= 0;
SELECT COUNT(*) FROM t;
-- 快:掃描較窄的二級索引
SELECT COUNT(*) FROM t WHERE aid >= 0; -- aid 為二級索引欄位
注意:aid >= 0 條件需覆蓋全表資料分佈,否則統計結果不準。若業務允許近似值,可結合 EXPLAIN 估算行數或使用資訊結構 INFORMATION_SCHEMA.TABLES.TABLE_ROWS。
INNODB_METRICS 與 INNODB_TABLESTATS 可獲取更精準的統計資訊。