文章目录
1 选错索引的现象2 优化器的逻辑3 索引选择异常和处理3.1 采用force index强行选择一个索引3.2 第二种方法3.3 第三种方法3.4 第四种方法
4 例子中force index(a)的扫描行数为什么是37000
1 选错索引的现象
在MySQL中一张表可以支持多个索引。但是,写SQL语句的时候并没有主动指定使用哪个索引,使用哪个索引是由MySQL来确定的。 一条本来可以执行得很快的语句,却可能由于MySQL选错了索引会导致执行速度变得很慢。
创建一个简单的表,表里有a、b两个字段,并分别建上索引:
CREATE TABLE `t` (
`id` int(11) NOT NULL,
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `a` (`a`),
KEY `b` (`b`)
) ENGINE=InnoDB;
然后往表t中插入10万行记录,取值按整数递增,即:(1,1,1),(2,2,2),(3,3,3) …
delimiter ;;
create procedure idata()
begin
declare i int;
set i=1;
while(i |