索引失效的几种情况
1. MySQL 可以為多個字段創建索引,一個索引可以包括 16 個字段。對于多列索引,過濾條件要使用索引,必須按照索引建立的順序,依次滿足,一旦跳過某個字段,索引后面的字段都無法被使用。如果查詢條件中沒有使用這些字段中第 1 個字段時,多列(或聯合)索引不會被使用。
2. 計算、函數、類型轉換(自動或手動)導致索引失效
3. 范圍條件右邊的列索引失效
應用開發中范圍查詢,例如:金額查詢,日期查詢往往都是范圍查詢。應將查詢條件放置 WHERE 語句最后。(創建的聯合索引中,務必把范圍涉及到的字段寫在最后)
4. 不等于( != 或者 <> )索引失效
5. is null 可以使用索引,is not null 無法使用索引
最好在設計數據表的時候就將字段設置為 NOT NULL 約束,比如可以將 INT 類型的字段,默認值設置為 0。將字符類型的默認值設置為空字符串 '' 。同理,在查詢中使用 not like 也無法使用索引,導致全表掃描
6. like 以通配符 % 開頭索引失效
Alibaba《Java開發手冊》,強制要求:頁面搜索嚴禁左模糊或者全模糊,如果需要請走搜索引擎來解決
7.? OR 前后存在非索引的列,索引失效
8. 數據表和表的字符集統一使用 utf8mb4
統一使用 utf8mb4 (5.5.3版本以上支持)兼容性更好,統一字符集可以避免由于字符集轉換產生的亂碼。不同的字符集進行比較前需要進行轉換會造成索引失效。
總結
- 上一篇: php7模拟,认识PHP7虚拟机()三
- 下一篇: 东华大学计算机专业分数线,2019年东华