Mysql優化,導致查詢不走索引的原因總結

2021-08-16 19:30:44 字數 978 閱讀 4227

最近公司讓我做sql優化的工作(mysql),用explain發了一些問題。常見的像or ,in,>= ,或者是巢狀等導致索引失效,導致查詢效能降低的問題在這裡就不做陳述了,網上的文章一搜一 大片。我只是寫點個人工作中遇到的,網上不好搜尋的,但是不保證所有的場景都試用,後續我還會更新。

1、order by 和 limit 結合使用,如果where 字段,order by欄位都是索引,那麼有limit索引會使用order by欄位所在的索引。沒有limit會使用where 條件的索引。遇到此類狀況可以考慮用子查詢將order by 和 limit 分開。這種情況主要發生在你用了多個索引,那麼你需要注意了。它可能不執行你希望的走索引。(我覺得mysql會自動計算索引)

2、date_format()格式化時間,格式化後的時間再去比較,可能會導致索引失效。

3、子查詢中order by的索引會失效,同時可能導致子查詢中的where條件索引都不能用。

4、字符集的使用導致不走索引,有時你會發現用乙個sql 條件值不同可能會有天的差別(我之前遇到的 兩個不同的id號,乙個查詢80s,乙個不到1s)

5、like語句 

6、列型別為字串型別,查詢時沒有用單引號引起來 

7、在where查詢語句中使用表示式 

8、在where查詢語句中對字段進行null值判斷 

9、在where查詢中使用了or關鍵字, myisam錶能用到索引, innodb不行;(用union替換or,可以使用索引) 10、全表掃瞄快於索引掃瞄(資料量小時)

先說這幾條.如果檢視執行計畫不理想的話,我建議在啟動資料庫時加上兩個啟動引數,會看的更清楚(每個表的執行次數和執行時間) 

--log-slow-queries     (查詢日誌)

--log-queries-not-using-indexes   (查詢未使用索引日誌)

最後的優化方式就是測試,因為業務的不同優化理論不可能總是可以帶來很高的效率,利用explain或desc檢視,然後再針對某個查詢或表做改進吧。

mysql優化,導致查詢不走索引的原因總結

最近公司讓我做sql優化的工作 mysql 用explain發了一些問題。常見的像or in,或者是巢狀等導致索引失效,導致查詢效能降低的問題在這裡就不做陳述了,網上的文章一搜一 大片。我只是寫點個人工作中遇到的,網上不好搜尋的,但是不保證所有的場景都試用,後續我還會更新。1 order by 和 ...

mysql 索引優化,索引建立原則和不走索引的原因

第一 選擇唯一性索引 唯一性索引的值是唯一的,可以更快捷的通過該索引來確定某條記錄.2.索引的列為where 後面經常作為條件的字段建立索引 如果某個字段經常作為查詢條件,而且又有較少的重複列或者是唯一咧可以考慮作為索隱列 經常作為查詢條件的列作為索引會提高速度 3.位經常需要進行排序.分組和聯合操...

mysql之不走索引和sql優化

一.不走索引的情況 使用 和 不等於符號查詢 使用 not in not exists 查詢 使用like字尾查詢,如 string 在建立索引和沒有索引的字段上使用or,會導致查詢不走索引 使用 符號,可能不走索引,這個要看優化器的判斷 字串型別字段使用數字進行比較,不走索引,如 varchar ...