首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 索引選擇性深度解析:何時全表掃描優於索引掃描

     編輯:MySQL 資料庫相關知識

MySQL 索引選擇性與優化器決策機制

MySQL 不總是正確選擇索引。理解**選擇性** 是優化查詢關鍵。

選擇性定義與計算

CREATE TABLE r2 (
  id INT(11) DEFAULT NULL,
  id1 INT(11) DEFAULT NULL,
  cname VARCHAR(32) DEFAULT NULL,
  KEY id1 (id1)
) ENGINE=MyISAM;

SELECT COUNT(*) FROM r2;           -- 250001 (V1)
SELECT COUNT(*) FROM r2 WHERE id1=1; -- 83036 (V2)

選擇性 = V2 / V1 = 0.3321 (33.21%)

經驗法則

  • 選擇性 > 20-25%:全表掃描通常優於索引掃描 (Oracle 閾值 25%)。
  • 選擇性 < 20%:索引掃描通常更優。

MySQL 實測行為

EXPLAIN SELECT COUNT(cname) FROM r2 WHERE id1=1;
-- 結果顯示 type=ref, key=id1, rows=81371, Extra=Using where
-- MySQL 選擇了索引,即使選擇性 33% > 25%

對比驗證

需進一步對比 SELECT COUNT(*) (全表掃描) 與 SELECT COUNT(cname) (索引掃描) 的實際執行時間,驗證優化器決策是否最優。
關鍵啟示: MySQL 優化器對選擇性閾值判斷較保守,高選擇性查詢可能仍走索引,導致效能不如全表掃描。必要時可用 FORCE INDEX、IGNORE INDEX 或重寫查詢引導優化器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved