在資料庫表中,使用索引可以提高查詢速度。但是索引並不是對所有的查詢操作都會生效的。比如以下幾種情況,將導致索引失效:
1、如果查詢條件用or,必須or條件中的每個列都加上索引,否則無效。
2、對於復合索引(又叫多列索引或者聯合索引),如果查詢的列不使用復合索引的第一部分,則不使用索引。例如,tb表的復合索引為(key1,key2,key3),則查詢select * from tb where key2=1 and key2>5將不會使用索引。
3、如果like是以%開頭的,則該列上的索引不會被使用。例如:select * from tb where key1 like "%a"; 即使key1列上建立了索引,該查詢也不會使用索引。
4、存在索引列的資料型別**轉換,則不使用索引。例如:列key1的資料型別為字串,select * from tb where key1=1; 將不會使用索引。要想使用索引,必須將字串用引號印起來。
5、where字句裡對索引列有數**算或者使用函式,則不使用索引。
1、資料唯一性差(乙個欄位的取值只有幾種情況)的字段不要使用索引:
例如性別,只有兩種可能資料。意味著索引的二叉樹級別少,這樣的二叉樹查詢無異於全表掃瞄。
2、頻繁更新的字段不要使用索引:
例如login_count登陸次數,頻繁變化導致索引也頻繁變化,增大資料庫工作量,降低效率。
MySQL查詢不使用索引彙總
mysql查詢不使用索引彙總 眾所周知,增加索引是提高查詢速度的有效途徑,但是很多時候,即使增加了索引,查詢仍然不使用索引,這種情況嚴重影響效能,這裡就簡單總結幾條mysql不使用索引的情況 如果mysql估計使用索引比全表掃瞄更慢,則不使用索引。例如,如果列key均勻分布在1和100之間,下面的查...
MySQL查詢不使用索引彙總
眾所周知,增加索引是提高查詢速度的有效途徑,但是很多時候,即使增加了索引,查詢仍然不使用索引,這種情況嚴重影響效能,這裡就簡單總結幾條mysql不使用索引的情況 如果mysql估計使用索引比全表掃瞄更慢,則不使用索引。例如,如果列key均勻分布在1和100之間,下面的查詢使用索引就不是很好 sele...
mysql強制使用索引與不使用索引
oracle可以強制使用索引來優化那些因為種種原因沒走索引的sql mysql支援嗎?答案是肯定的 mysql強制索引和禁止某個索引 1.mysql強制使用索引 force index 索引名或者主鍵pri 例如 select from table force index pri limit 2 強...