一、环境准备
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 并没有使用索引。
这里就是联合索引的最左匹配原则。