索引,但用不上的情況:
在數(shù)據(jù)庫表中,使用索引可以提高查詢速度。但是索引并不是對所有的查詢操作都會生效的。比如以下幾種情況,將導致索引失效:
1、如果查詢條件用or,必須or條件中的每個列都加上索引,否則無效。
2、對于復合索引(又叫多列索引或者聯(lián)合索引),如果查詢的列不使用復合索引的第一部分,則不使用索引。例如,tb表的復合索引為(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ù)學運算或者使用函數(shù),則不使用索引。
不推薦使用索引的情況:
1、數(shù)據(jù)唯一性差(一個字段的取值只有幾種情況)的字段不要使用索引:
例如性別,只有兩種可能數(shù)據(jù)。意味著索引的二叉樹級別少,這樣的二叉樹查詢無異于全表掃描。
2、頻繁更新的字段不要使用索引:
例如login_count登陸次數(shù),頻繁變化導致索引也頻繁變化,增大數(shù)據(jù)庫工作量,降低效率。