MySQL的最左索引匹配是指在使用聯(lián)合索引時,優(yōu)先使用索引的最左邊的列進行匹配查詢。為什么要采用最左索引匹配呢?
首先,最左索引匹配能夠提高查詢效率。對于一條SQL語句,如果能夠使用匹配最左列的索引進行查詢,那么將會非常快速。同時,由于聯(lián)合索引將多個列組成了一個索引,因此,在使用最左索引匹配的同時,也避免了不必要的全表掃描。
其次,最左索引匹配也能夠避免冗余查詢。舉個例子,如果一個表有三個字段,分別為A、B、C,并且有一個聯(lián)合索引(A,B,C),那么在查詢時如果只使用B,C兩個字段,其實就是冗余查詢了。而最左索引匹配能夠快速找到匹配的索引,避免了這種冗余查詢。
但是需要注意的是,最左索引匹配只適用于聯(lián)合索引,對于單列索引無效。同時,在使用最左索引匹配時,需要遵循“最左前綴匹配原則”,即在查詢時只能使用聯(lián)合索引的最左前綴列,否則將無法使用索引進行查詢。
-- 例子 -- 表結構 CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `age` int(11) NOT NULL, `gender` tinyint(4) NOT NULL, PRIMARY KEY (`id`), KEY `idx_name_age` (`name`,`age`) ) ENGINE=InnoDB; -- 可以使用聯(lián)合索引查詢 -- 最左前綴匹配原則:只使用聯(lián)合索引的最左列 name 進行查詢 SELECT * FROM `test` WHERE `name` = '張三'; -- 無法使用聯(lián)合索引查詢 -- 不滿足最左前綴匹配原則,查詢中用到的 age 列,并未使用聯(lián)合索引 SELECT * FROM `test` WHERE `age` = 18;
下一篇css同行排列代碼