mysql索引的最左前缀原则

1.我们先创建表

create table test( a int , b int, c int, d int, key index_abc(a,b,c) )engine=InnoDB default charset=utf8;

2.插入一些数据

DROP PROCEDURE IF EXISTS proc_initData;
DELIMITER $
CREATE PROCEDURE proc_initData()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i<=10000 DO
    INSERT INTO test(a,b,c,d) VALUES(i,i,i,i);
    SET i = i+1;
END WHILE;
END $
CALL proc_initData();
 

3.可以看到。我们建表的时候是设置了abc三列的组合索引。所以当我们

explain select * from test where a<10 ;
explain select * from test where a<10 and b <10;
explain select * from test where a<10 and b <10 and c<10;

可以看到数据库都是走了索引的

而且我们执行

explain select * from test where b<10 and a<10;

也是会走索引的。因为数据库优化器帮我们进行了优化。其实真正执行时会按索引顺序a<10 and b<10这种来执行的。

但是如果时

explain select * from test where  b<10 and c <10

这时候为什么没有走索引了呢?最左前缀匹配原则是假设我们设置(name,age,id)顺序为索引时。name是建立索引树的第一个比较因子,所以要现有name,才知道搜索方向。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值