加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 为什么UNION比OR语句更快

发布时间:2021-03-18 06:42:57 所属栏目:MsSql教程 来源:网络整理
导读:参见英文答案 UNION ALL vs OR condition in sql server query3个 我有一个问题,我需要找到具有与值匹配的测量值,或根本没有测量值的记录.我用三种或四种不同的方法解决了这个问题,使用JOIN,使用NOT IN和使用NOT EXISTS.但是,查询最终每次都非常慢.然后我

参见英文答案 > UNION ALL vs OR condition in sql server query3个
我有一个问题,我需要找到具有与值匹配的测量值,或根本没有测量值的记录.我用三种或四种不同的方法解决了这个问题,使用JOIN,使用NOT IN和使用NOT EXISTS.但是,查询最终每次都非常慢.然后我尝试将查询分成两部分,它们都运行得非常快(三秒钟).但是使用OR组合查询需要超过五分钟.

阅读SO我尝试了UNION,这非常快,但对我正在使用的脚本非常不方便.

所以有两个问题:

>为什么UNION这么快? (或者为什么OR这么慢)?
>有什么办法可以强制MSSQL对快速的OR语句使用不同的方法吗?

解决方法

原因是在查询中使用OR通常会导致查询优化器放弃使用索引搜索并恢复扫描.如果查看两个查询的执行计划,您很可能会看到扫描您正在使用OR的位置,并寻找您使用UNION的位置.在没有看到您的查询的情况下,您无法就如何重组OR条件给出任何想法.但是您可能会发现将行插入临时表并连接到它可能会产生积极的结果.

此外,如果您想要所有结果,通常最好使用UNION ALL而不是UNION,因为您删除了行匹配的成本.

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读