mysql索引的最左字首原則

2021-10-07 17:16:10 字數 1140 閱讀 1818

1.我們先建立表

create table test( a int , b int, c int, d int, key index_abc(a,b,c) )engine=innodb default charset=utf8;

2.插入一些資料

drop procedure if exists proc_initdata;

delimiter $

create procedure proc_initdata()

begin

declare i int default 1;

while i<=10000 do

insert into test(a,b,c,d) values(i,i,i,i);

set i = i+1;

end while;

end $

call proc_initdata();

3.可以看到。我們建表的時候是設定了abc三列的組合索引。所以當我們

explain select * from test where a<10 ;

explain select * from test where a<10 and b <10;

explain select * from test where a<10 and b <10 and c<10;

可以看到資料庫都是走了索引的

而且我們執行

explain select * from test where b<10 and a<10;

也是會走索引的。因為資料庫優化器幫我們進行了優化。其實真正執行時會按索引順序a<10 and b<10這種來執行的。

但是如果時

這時候為什麼沒有走索引了呢?最左字首匹配原則是假設我們設定(name,age,id)順序為索引時。name是建立索引樹的第乙個比較因子,所以要現有name,才知道搜尋方向。

索引最左字首原則

今天在觀察慢sql統計的時候,發現了乙個sql的平均耗時長,而且總的掃瞄行數大,分析對應表的ddl,發現此表中只有乙個唯一索引index1 a,b,c 但是在查詢條件中沒有帶上a欄位,導致這個查詢sql沒有走索引,從而導致了全表掃瞄。這裡涉及到乙個索引最左字首原則,我們來一起看一下。下述摘自 通常我...

MySql最左字首原則

企業的筆試題,對資料庫這塊了解很淺,所以還是記錄一下吧。b tree 索引和 hash 索引的對比 對於 b tree 和 hash 資料結構的理解能夠有助於 不同儲存引擎下使用不同索引的查詢效能的差異,尤其是那些允許你選擇 b tree 或者 hash 索引的記憶體儲存引擎。b tree 索引的特...

MySql最左字首原則

最左字首原則 通過例項理解單列索引 多列索引以及最左字首原則 例項 現在我們想查出滿足以下條件的使用者id mysql select uid from people where lname liu and fname zhiqun and age 26 因為我們不想掃瞄整表,故考慮用索引。單列索引 ...