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