眾所周知,增加索引是提高查詢速度的有效途徑,但是很多時候,即使增加了索引,查詢仍然不使用索引,這種情況嚴重影響效能,這裡就簡單總結幾條mysql不使用索引的情況
如果mysql估計使用索引比全表掃瞄更慢,則不使用索引。例如,如果列key均勻分布在1和100之間,下面的查詢使用索引就不是很好:select * from table_name where key>1 and key<90;
如果使用memory/heap表,並且where條件中不使用「=」進行索引列,那麼不會用到索引,head表只有在「=」的條件下才會使用索引
用or分隔開的條件,如果or前的條件中的列有索引,而後面的列沒有索引,那麼涉及到的索引都不會被用到,例如:select * from table_name where key1='a' or key2='b';如果在key1上有索引而在key2上沒有索引,則該查詢也不會走索引
復合索引,如果索引列不是復合索引的第一部分,則不使用索引(即不符合最左字首),例如,復合索引為(key1,key2),則查詢select
* from table_name where key2='b';將不會使用索引
如果like是以『%』開始的,則該列上的索引不會被使用。例如select * from table_name where key1 like '%a';該查詢即使key1上存在索引,也不會被使用
如果列為字串,則where條件中必須將字元常量值加引號,否則即使該列上存在索引,也不會被使用。例如,select * from table_name where key1=1;如果key1列儲存的是字串,即使key1上有索引,也不會被使用。
從上面可以看出,即使我們建立了索引,也不一定會被使用,那麼我們如何知道我們索引的使用情況呢??在mysql中,有handler_read_key和handler_read_rnd_key兩個變數,如果
handler_read_key值很高而
handler_read_rnd_key的值很低,則表明索引經常不被使用,應該重新考慮建立索引。可以通過:show status like '
handler_read%'來檢視著連個引數的值。
MySQL查詢不使用索引彙總
mysql查詢不使用索引彙總 眾所周知,增加索引是提高查詢速度的有效途徑,但是很多時候,即使增加了索引,查詢仍然不使用索引,這種情況嚴重影響效能,這裡就簡單總結幾條mysql不使用索引的情況 如果mysql估計使用索引比全表掃瞄更慢,則不使用索引。例如,如果列key均勻分布在1和100之間,下面的查...
MySQL中查詢不使用索引的情況彙總
在資料庫表中,使用索引可以提高查詢速度。但是索引並不是對所有的查詢操作都會生效的。比如以下幾種情況,將導致索引失效 1 如果查詢條件用or,必須or條件中的每個列都加上索引,否則無效。2 對於復合索引 又叫多列索引或者聯合索引 如果查詢的列不使用復合索引的第一部分,則不使用索引。例如,tb表的復合索...
mysql強制使用索引與不使用索引
oracle可以強制使用索引來優化那些因為種種原因沒走索引的sql mysql支援嗎?答案是肯定的 mysql強制索引和禁止某個索引 1.mysql強制使用索引 force index 索引名或者主鍵pri 例如 select from table force index pri limit 2 強...