在數(shù)據(jù)庫(kù)表中,使用索引可以提高查詢速度。但是索引并不是對(duì)所有的查詢操作都會(huì)生效的梢卸。比如以下幾種情況,將導(dǎo)致索引失效:
1副女、如果查詢條件用or蛤高,必須or條件中的每個(gè)列都加上索引,否則無(wú)效碑幅。
2戴陡、對(duì)于復(fù)合索引(又叫多列索引或者聯(lián)合索引),如果查詢的列不使用復(fù)合索引的第一部分沟涨,則不使用索引恤批。例如,tb表的復(fù)合索引為(key1裹赴,key2喜庞,key3),則查詢select * from tb where key2=1 and key2>5將不會(huì)使用索引篮昧。
3赋荆、如果like是以%開(kāi)頭的,則該列上的索引不會(huì)被使用懊昨。例如:select * from tb where key1 like "%a"; 即使key1列上建立了索引窄潭,該查詢也不會(huì)使用索引。
4、存在索引列的數(shù)據(jù)類型隱形轉(zhuǎn)換嫉你,則不使用索引月帝。例如:列key1的數(shù)據(jù)類型為字符串,select * from tb where key1=1; 將不會(huì)使用索引幽污。要想使用索引嚷辅,必須將字符串用引號(hào)印起來(lái)。
5距误、where字句里對(duì)索引列有數(shù)學(xué)運(yùn)算或者使用函數(shù)簸搞,則不使用索引