mysql索引的最左前綴原則

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這種來執行的。

但是如果時

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章