本文已收录GitHub,更有互联网大厂面试真题,面试攻略,高效学习资料等
MySQL 中,可以为某张表指定多个索引,但在语句具体执行时,选用哪个索引是由 MySQL 中执行器确定的。那么执行器选择索引的原则是什么,以及会不会出现选错索引的情况呢?
先看这样一个例子:
创建表 Y,设置两个普通索引, 创建一个存储过程用于插入数据。
MySQL: 5.7.27, 隔离级别: RR
CREATE TABLE `Y` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `a` (`a`),
KEY `b` (`b`)
) ENGINE=InnoDB;
delimiter ;;
create procedure idata()
begin
declare i int;