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 因為我們不想掃瞄整表,故考慮用索引。單列索引 ...