索引,但用不上的情況:
在數(shù)據(jù)庫表中山宾,使用索引可以提高查詢速度至扰。但是索引并不是對所有的查詢操作都會生效的。比如以下幾種情況资锰,將導(dǎo)致索引失效:
1敢课、如果查詢條件用or,必須or條件中的每個列都加上索引绷杜,否則無效直秆。
2、對于復(fù)合索引(又叫多列索引或者聯(lián)合索引)接剩,如果查詢的列不使用復(fù)合索引的第一部分切厘,則不使用索引。例如懊缺,tb表的復(fù)合索引為(key1疫稿,key2,key3)鹃两,則查詢select * from tb where key2=1 and key2>5將不會使用索引遗座。
3、如果like是以%開頭的俊扳,則該列上的索引不會被使用途蒋。例如:select * from tb where key1 like "%a"; 即使key1列上建立了索引,該查詢也不會使用索引馋记。
4号坡、存在索引列的數(shù)據(jù)類型隱形轉(zhuǎn)換,則不使用索引梯醒。例如:列key1的數(shù)據(jù)類型為字符串宽堆,select * from tb where key1=1; 將不會使用索引。要想使用索引茸习,必須將字符串用引號印起來畜隶。
5、where字句里對索引列有數(shù)學(xué)運算或者使用函數(shù)号胚,則不使用索引籽慢。
不推薦使用索引的情況:
1、數(shù)據(jù)唯一性差(一個字段的取值只有幾種情況)的字段不要使用索引:
例如性別猫胁,只有兩種可能數(shù)據(jù)箱亿。意味著索引的二叉樹級別少,這樣的二叉樹查詢無異于全表掃描杜漠。
2极景、頻繁更新的字段不要使用索引:
例如login_count登陸次數(shù)察净,頻繁變化導(dǎo)致索引也頻繁變化驾茴,增大數(shù)據(jù)庫工作量盼樟,降低效率。