一、環境準備
1、建表
DROP TABLE IF EXISTS `test_table`;
CREATE TABLE `test_table` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '編號',
`namee` varchar(255) DEFAULT NULL COMMENT '姓名',
`sex` varchar(255) DEFAULT NULL COMMENT '性別',
`age` int(11) DEFAULT NULL COMMENT '年齡',
`bitthday` varchar(255) DEFAULT NULL COMMENT '生日',
`aihao` varchar(255) DEFAULT NULL COMMENT '愛好',
`xuehao` varchar(255) DEFAULT NULL COMMENT '學號',
`mingci` int(11) DEFAULT NULL COMMENT '名詞',
PRIMARY KEY (`id`),
KEY `lianhe` (`namee`,`xuehao`,`mingci`)
) ENGINE=InnoDB AUTO_INCREMENT=5002 DEFAULT CHARSET=utf8;
2、使用存儲過程插入一些測試數據
DROP PROCEDURE test_insert;
DELIMITER ;;
CREATE PROCEDURE test_insert ()
BEGIN
DECLARE
i INT DEFAULT 0 ;
WHILE i < 5000 DO
INSERT INTO test_table (
namee,
sex,
age,
bitthday,
aihao,
xuehao,
mingci
)
VALUES
(
CONCAT('test', i),
'男',
22,
'2019-01-01',
'xuexi',
CONCAT('test', i),
i
) ;
SET i = i + 1 ;
END
WHILE ;
END;;
CALL test_insert () ;
二、測試現象
1、按照聯合索引順序查詢查看索引使用情況
圖中可以看到,聯合索引lianhe的字段順序是 namee,xuehao,mingci,現使用這個順查看索引使用情況如下:
EXPLAIN select * from test_table where namee = "aa" and xuehao = "xuexi" and mingci = "aaa";
通過觀察,發現用到了索引 lianhe。
2、跳過聯合索引的最左邊字段測試索引使用情況
跳過最左邊字段也就是不適用第一個字段namee時測試結果如下:
EXPLAIN select * from test_table where xuehao = "xuexi" and mingci = "aaa";
圖中可以發現,type = all 並沒有使用索引。
這裏就是聯合索引的最左匹配原則。