聯合索引ABC的幾種索引利用情況

2021-10-10 09:18:01 字數 1996 閱讀 6251

對於復合索引:mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index (a,b,c)。 可以支援a | a,b| a,b,c 3種組合進行查詢,但不支援 b,c進行查詢 .當最左側欄位是常量引用時,索引就十分有效。

以下是一些例子:

(1) select * from mytest where a=3 and b=5 and c=4; ----abc順序

abc三個索引都在where條件裡面用到了,而且都發揮了作用

(2) select * from mytest where c=4 and b=6 and a=3;

where裡面的條件順序在查詢之前會被mysql自動優化,效果跟上一句一樣

(3) select * from mytest where a=3 and c=7;

a用到索引,b沒有用,所以c是沒有用到索引效果的(b沒有使用到,所以索引達不到 c ,所以c未使用索引)

(4) select * from mytest where a=3 and b>7 and c=3; ---- b範圍值,斷點,阻塞了c的索引

a用到了,b也用到了,c沒有用到,這個地方b是範圍值,也算斷點,只不過自身用到了索引

(5) select * from mytest where b=3 and c=4; — 聯合索引必須按照順序使用,並且需要全部使用

因為a索引沒有使用,所以這裡 bc都沒有用上索引效果

(6) select * from mytest where a>4 and b=7 and c=9;

a用到了b沒有使用,c沒有使用(a用了範圍所以,相當於斷點,之後的b,c都沒有用到索引)

(7) select * from mytest where a=3 order by b;

a用到了索引,b在結果排序中也用到了索引的效果,a下面任意一段的b是排好序的

(8) select * from mytest where a=3 order by c;

a用到了索引,但是這個地方c沒有發揮排序效果,因為中間斷點了,使用 explain 可以看到 filesort

(9) select * from mytable where b=3 order by a;

b沒有用到索引,排序中a也沒有發揮索引效果

1.不在索引列上做任何操作(計算、函式、(自動or手動)型別轉換),會導致索引失效而轉向全表掃瞄

2.儲存引擎不能使用索引範圍條件右邊的列(例如 只用到b , c)

3.盡量使用覆蓋索引(只訪問索引的查詢(索引列和查詢列一致)),減少select ***

4.mysql在使用不等於(!=或者<>)的時候**無法使用索引會導致全表掃瞄

5.is null,is not null也無法使用索引

6.ike以萬用字元開頭(』%abc…』)mysql索引失效會變成全表掃瞄的操作。問題:解決like『%字串%』時索引不被使用的方法

7.字串不加單引號索引失效

建議:

對於單鍵索引,盡量選擇針對當前query過濾性更好的索引

在選擇組合索引的時候,當前query中過濾性最好的字段在索引字段順序中,位置越靠前越好。

. 在選擇組合索引的時候,盡量選擇可以能夠包含當前query中的where子句中更多字段的索引

. 在選擇組合索引的時候,盡量選擇可以能夠包含當前query中的where子句中更多字段的索引

盡可能通過分析統計資訊和調整query的寫法來達到選擇合適索引的目的

持續更新!!!繼續學習!!!

mysql聯合索引abc

建立測試表 set names utf8mb4 set foreign key checks 0 create table test id int 11 not null auto increment,a int 11 not null default 1,b int 11 not null def...

透徹理解聯合索引 a,b,c

目錄 用到索引的有a,ab,abc,ac 因為優化器會自動調整and前後的順序,所以ba,cba,bca,ca都會用到索引,其他的都不會用到該索引。ac這一組僅僅是a用到索引。組合索引 有 最左字首 原則,遇到範圍查詢 聯合索引是一顆b 樹 a,b 情況描述 在mysql的user表中,對a,b,c...

Mysql 聯合索引使用情況測試

建立索引 是表名 a,b,c是建立索引的欄位名 alter table add index sindex a b c 情況一 使用單條件查詢時,索引使用情況如下 只會用到 a 的索引 type ref,key sindex,key len 163,ref const select from wher...