索引合并

MySQL在 5.0版本中引入新特性:索引合并优化(Index merge optimization),当查询中单张表可以使用多个索引时,同时扫描多个索引并将扫描结果进行合并。

通俗解释就是: 一条SQL中使用两个或多个索引,查出来的数据集取交集或并集

该特新主要应用于以下三种场景:

1、 对OR语句求并集,如查询SELECT * FROM TB1 WHERE c1=“xxx” OR c2=""xxx"时,如果c1和c2列上分别有索引,可以按照c1和c2条件进行查询,再将查询结果合并(union)操作,得到最终结果

2、 对AND语句求交集,如查询SELECT * FROM TB1 WHERE c1=“xxx” AND c2=""xxx"时,如果c1和c2列上分别有索引,可以按照c1和c2条件进行查询,再将查询结果取交集(intersect)操作,得到最终结果

3、 对AND和OR组合语句求结果

注意事项:

select * from LHY where name = “lhy” and A > 100 or B > 100;
LHY表中包含索引 A 索引 B

不是使用合并索引就一定能够提高效率
  • 当索引A 查出来数据为100W条, 索引B查出来的数据只有100条,当两个数据集取交集时,还是比价消耗IO的
遇到这种情况可以尝试优化SQL来实现(union)

select * from LHY where name = “lhy” and A > 100 union all select * from LHY where name = “lhy” and B > 100 and A <= 100;
第二条sql中要包含第一条sql中的反操作,避免数据重复

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值