一葉知秋丿
以 Mysql 為例,其中索引 BTree 類型 。以下幾種SQL設計會導致雖然使用了索引,但是索引不會生效,即引擎放棄使用索引而進行全表掃描:
- WHERE 子句中使用 != 或 <> 操作符。
- WHERE 子句中對索引列使用 %前綴模糊查詢。
- WHERE 子句中對索引列使用 OR 來連接條件。
- WHERE 子句中對索引列使用 NOT IN。
- WHERE 子句中對索引列使用計算、函數、類型轉換等操作。
- WHERE 子句中對索引列使用參數。
軟件測試開發技術棧
以下情況,MySQL的索引"失效"不可用
1、通過索引掃描的記錄超過20%~30%,可能會變成全表掃描
2、聯合索引中,查詢條件不符合左側前導要求
3、查詢條件列最左以通配符%開始
4、查詢條件發生數據類型隱式轉換,或者字符集不匹配
5、HEAP表使用HASH索引時,使用範圍檢索或者ORDER BY
6、多表關聯時,排序字段不屬於驅動表,無法利用索引完成排序
7、JOIN查詢時,關聯列數據類型(字符集)不一致也會導致索引不可用
8、不可見索引,即便force index也不可用9、違反索引排序規則