mysql复合索引(联合索引)用法以及最左原则

1.准备表(含23w数据)

SELECT COUNT(*) FROM index_test;

在这里插入图片描述

在这里插入图片描述

2.查看索引,只有一个主键索引

在这里插入图片描述
3.创建联合索引(abc)

ALTER TABLE index_test ADD INDEX index_a_b_c(a, b, c);

在这里插入图片描述
4.能够触发索引的几种情况
1.单独用a做条件查询

EXPLAIN SELECT * FROM index_test WHERE a = 'H5158000';

在这里插入图片描述
2.用a和b做条件联合查询

EXPLAIN SELECT * FROM index_test WHERE a = 'H5158000' AND b = '432192';

在这里插入图片描述
3.用abc联合查询

EXPLAIN SELECT * FROM index_test WHERE a = 'H5158000' AND b = '432192' AND c = '生理盐水清洁棉';

在这里插入图片描述

5.联合索引不触发索引的几种情况
1.or两边放联合索引,不触发索引(如果两边是单列索引另算)

EXPLAIN SELECT * FROM index_test WHERE a = 'H5158000' OR b = '432192';

在这里插入图片描述

2.单独使用b不触发索引

EXPLAIN SELECT * FROM index_test WHERE b = '432192';

在这里插入图片描述

3.不使用a,使用b,c也不触发索引

EXPLAIN SELECT * FROM index_test WHERE b = '432192' AND c = '生理盐水清洁棉';

在这里插入图片描述

5.or的用法
1.添加两个单列普通索引

ALTER TABLE index_test ADD INDEX index_d(d);
ALTER TABLE index_test ADD INDEX index_e(e);

在这里插入图片描述

1.or两边只要有一个不是索引就不启用索引查询

//e为单列索引,f为非索引--失效
1.EXPLAIN SELECT * FROM index_test WHERE e = 'SLYSQJM' OR f = '1008858000463';
//e为单列索引,b为联合索引(非最左索引)--失效
2.EXPLAIN SELECT * FROM index_test WHERE e = 'SLYSQJM' OR b = '1008858000463';

在这里插入图片描述

2.or两边一个是联合索引的最左索引一个是单例索引才生效,否则失效

EXPLAIN SELECT * FROM index_test WHERE e = 'SLYSQJM' OR a = '1008858000463';

在这里插入图片描述

3.数据量过小,or也会使本该有效的索引失效
6.大于号小于号的用法
不固定
7.总结

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值