SQL索引失效

2022-07-10 15:57:15 字數 652 閱讀 3668

索引什麼時候不會生效,以下集中情況會導致索引失效:

1.條件中用or,即使其中有條件帶索引,也不會使用索引查詢(這就是查詢盡量不要用or的原因,用in吧)

注意:使用or,又想索引生效,只能將or條件中的每個列都加上索引

2.對於多列索引,不是使用的第一部分,則不會使用索引。

3.like的模糊查詢以%開頭,索引失效

4.如果列型別是字串,那一定要在條件中將資料使用引號引用起來,否則不會使用索引

5.如果mysql預計使用全表掃瞄要比使用索引快,則不使用索引

下面是檢視索引使用情況:

show status like 『handler_read%』;  

handler_read_key:這個值越高越好,越高表示使用索引查詢到的次數  

handler_read_rnd_next:這個值越高,說明查詢低效 

SQL優化 索引失效

資料型別出現隱式轉換的時候不會命中索引,例如當列型別是字串,一定要將字元常量值用引號引起來。例如 to char 日期,yyyy mm dd 2020 12 10 改寫為 日期 to date 2020 12 10 yyyy mm dd 例如 like 哈哈 like 哈哈 都不會走索引 盡量寫 l...

SQL導致的索引失效

我們在開發中會發現,明明我這條sql語句應該是用到了索引才對,但是為何速度仍然那麼慢,其實是你的sql寫的有問題導致了索引失效,我們來看下什麼情況下mysql的索引會失效 對查詢進行優化,盡量避免全表掃瞄,避免導致索引失效 避免在where子句中 的左邊使用表示式操作或者函式操作select id ...

這樣寫sql避免索引失效

合理地對資料表加索引可以大大加快資料的訪問效率,但索引也不是對任何查詢都有效,如果sql的結構不當,也會發生索引失效。所以為避免採坑,寫下此文,作為記錄。下面的例子是在mysql中建立的一張表,建表語句如下 create table user info id bigint 32 not null,n...