您当前的位置: 首页 >  sql

衣舞晨风

暂无认证

  • 1浏览

    0关注

    1156博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

SQL UNION vs OR 性能

衣舞晨风 发布时间:2020-04-12 10:31:18 ,浏览量:1

本文整理自:stackoverflow

翻译自Bill Karwin回答:

要么你读的那篇文章用了一个不好的例子,要么你误解了他们的观点。

select username from users 
where company = 'bbc' or company = 'itv';

等价于:

select username from users 
where company IN ('bbc', 'itv');

在这个查询中MySQL会使用company上的索引。不需要改成UNION。

更棘手的情况是,OR条件涉及两个不同的列。

select username from users 
where company = 'bbc' or city = 'London';

假设company列和city列都有一个独立的索引。MySQL通常在一个给定的查询中每个表只使用一个索引,那么应该使用哪个索引呢?如果它使用company上的索引,它仍然必须执行表扫描,以找到伦敦所在的行。如果它使用city上的索引,则必须对company为bbc的行进行表扫描。

UNION 解决方案适用于这种情况。

select username from users where company = 'bbc' 
union
select username from users where city = 'London';

这样的话每个子查询都可以使用索引进行搜索,然后再将子查询的结果合并在一起。

union ? union all ? 取决于需求及where过滤后的数据量 对于索引列来最好使用union all,因复杂的查询【包含运算等】将使or、in放弃索引而全表扫描,除非你能确定or、in会使用索引。 对于只有非索引字段来说你就老老实实的用or或者in,因为 非索引字段本来要全表扫描而union all 只成倍增加表扫描的次数。

个人微信公众号: 这里写图片描述

个人博客 https://jiankunking.com

作者:jiankunking 出处:http://blog.csdn.net/jiankunking

关注
打赏
1647422595
查看更多评论
立即登录/注册

微信扫码登录

0.0551s