索引優化的常用方法以及失效判斷

2021-09-25 17:09:36 字數 2729 閱讀 1451

explain簡介

全值匹配最好

最佳左字首原則

查詢無法使用索引範圍條件右邊的列

盡量使用覆蓋索引,也就是只查詢建立索引的字段,減少*的使用

mysql中,在使用!=(<>)這兩個符號的時候,索引會失效

is null is not null 也會索引失效

用like模糊查詢,如果以「%xx」開頭,也會索引失效,使用「xx%」索引不失效,同時針對覆蓋索引「%xx%」也不失效

使用or也會索引失效

全值匹配

也就是我們怎麼建立的索引,我們就怎麼使用稅索引,順序也不改變,通過下面的例子

這裡有2個索引,乙個是主鍵索引乙個是自定義索引,那麼我們使用就按如下使用

以上的三個例子,就是完全按照我們的索引建立順序使用的,沒有一點不一樣,那麼接下來,繼續看乙個例子

explain select * from demo1 where c1='a1' and c3='a3' and c2='a2'
這個例子可以很明顯的看出我們索引的順序是不一樣,然而還是使用了三個索引,這個又是什麼原因呢?這個就是因為我們程式執行的順序,和我們寫的順序不一定是一樣的,mysql會自動幫我們優化

最佳左匹配原則

其實也就是索引的使用,會匹配我們建立的索引字段,而且是從頭開始匹配,如果中間有缺失,那後續的索引也將失效

我們都知道這兩個關鍵字,乙個是分組,乙個是排序,那麼這兩種又是否可以使用到我們的索引呢?又或者說著兩種會不會存在索引失效

MySQL優化之索引失效的原因

索引字段作為範圍查詢的條件時。範圍字段之後的索引全部失效。索引字段作為查詢條件時,沒有按照建立索引的字段順序。使用 或 的時候無法使用索引會導致全表掃瞄。使用 is null或 is not null 也無法使用索引。使用like時,萬用字元 在左邊或在兩邊時,索引失效,會變成全表掃瞄。字串不加單引...

mysql索引建立的場景以及索引失效的問題

對於查詢頻率高的字段建立索引 對排序 分組 聯合查詢頻率高的字段建立索引 如果需要將多個列設定為索引時,可以採用多列索引 選擇唯一性索引 名字不行 盡量使用資料量少的索引,刪除不再使用或者很少使用的索引,數目不宜太多 1.索引列出現函式引數或者表示式 解決方案 事先計算好表示式的值 2.使用左模糊 ...

or導致索引失效的解決方法 索引失效的7種情況

簡述 什麼時候沒用 1.有or必全有索引 2.復合索引未用左列字段 3.like以 開頭 4.需要型別轉換 5.where中索引列有運算 6.where中索引列使用了函式 7.如果mysql覺得全表掃瞄更快時 資料少 什麼時沒必要用 1.唯一性差 2.頻繁更新的字段不用 更新索引消耗 3.where...