6. 添加了索引但不被使用的幾種常見(jiàn)可能
上1講聊了甚么時(shí)候不要使用索引,但有時(shí)候使用了也不見(jiàn)得會(huì)被使用。
下面是幾種添加了索引但不被使用的情況
1) 多列索引查詢(xún)條件沒(méi)有使用最左側(cè)的字段
對(duì)創(chuàng)建的多列索引,如果查詢(xún)條件沒(méi)有使用最左側(cè)的列,索引就不會(huì)被使用。
多列索引:1個(gè)索引對(duì)應(yīng)多個(gè)列
比如
我創(chuàng)建了這么個(gè)多列索引
如果where語(yǔ)句中有deptno則會(huì)使用索引,否則不使用
以下
2) 如果條件中有or
只要條件中有1個(gè)字段沒(méi)有添加索引,則不會(huì)使用索引
3) 類(lèi)型不對(duì)應(yīng)
比方說(shuō),如果列類(lèi)型是字符串,那1定要在條件中將數(shù)據(jù)使用引號(hào)援用起來(lái)。否則不使用索引
4) mysql優(yōu)化器的決定
如果mysql估計(jì)使用全表掃描要比使用索引快,則不使用索引
最后1點(diǎn),也是筆者感受最深的1點(diǎn)
5) like‘%aaa’不會(huì)使用到索引
只要模糊查詢(xún)的模糊值在字符串前面,則不會(huì)使用索引‘%aaa’和‘_aaa’都不會(huì)!
以下
應(yīng)當(dāng)說(shuō)這是Mysql給程序員們開(kāi)的1個(gè)玩笑。要是我的表數(shù)據(jù)量很大,而且又需要使用like’%%’這樣的模糊查詢(xún)來(lái)檢索時(shí),該怎樣辦??
下1章,筆者將會(huì)給大家分享解決這個(gè)問(wèn)題的N種方法!