mysql什麼情況下不會使用索引

2021-07-25 12:55:12 字數 1013 閱讀 8130

1、如果mysql估計使用索引比全表掃瞄更慢,則不適用索引,

ex:列key_part1均勻的分布在1-100之間。下面的sql則不會使用索引

select * from table_name where 

key_part1 > 1 and 

key_part1 <90

2、如果使用memory/heap表,並且where語句中不適用「=」進行索引,則不會使用索引。heap表只有在「=」的條件下,才使用索引。

3、用or分割開的條件,如果or左右兩個條件中有乙個列沒有索引,則不會使用索引。

ex:select * from table_name where key1='a' or key2='b';

如果在key1上有索引而在key2上沒有索引,則該查詢也不會走索引

4、復合索引,如果索引列不是復合索引的第一部分,則不使用索引(即不符合最左字首)

ex:復合索引為(key1,key2) ,一下sql

將不會使用索引

select * from table_name where key2='b';

5、如果like是以『%』開始的,則該列上的索引不會被使用。

ex:select * from table_name where key1 like '%a';

6.如果列為字串,則where條件中必須將字元常量值加引號,否則即使該列上存在索引,也不會被使用。

ex: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 什麼情況下不應該使用索引

今天同事問了一波,如果要建一張表,什麼情況下使用索引,什麼情況下不使用。那麼我們其實都知道使用索引好,但是什麼情況下不使用索引比較好,這就有點不清楚了,下邊來細說一下。1,表的資料量特別小的時候。如果一張表,只有極少的幾條資料,那麼不使用索引,是直接全表掃瞄,速度也是極快的。但是如果使用索引,為什麼...

PCB 什麼情況下可以敷銅,什麼情況下不能敷銅?

路面積,敷銅作用主要有兩個方面 1 可以起到一定的回流作用,當然,如果板層較多且層設定合理,敷銅回 流的作用就很小 2 可以起到一定的遮蔽作用,將上下層兩個覆銅平面想象成無限大,就成 了乙個遮蔽盒,敷銅永遠做不到這點,就像機箱一樣。從以上兩點出發,敷銅要看具體情況 1 對於需要嚴格阻抗控制的板子,不...