当前位置: 首页 > 面试题库 >

为什么UNION比OR语句快?

上官和惬
2023-03-14
问题内容

我有一个问题,我需要查找具有与值匹配的度量 根本没有该度量的记录。我使用JOINs,usingNOT IN和using三种或四种不同的方法解决了该问题NOT EXISTS。但是,每次查询最终都变得非常慢。然后,我尝试将查询一分为二,它们都非常快地运行(三秒钟)。但是使用组合查询OR需要花费超过五分钟的时间。

在SO上阅读,我尝试了UNION,速度非常快,但是对于我正在使用的脚本非常不便。

有两个问题:

  1. 为什么UNION这么快?(或者为什么OR这么慢)?
  2. 我有什么方法可以强制MSSQLOR快速的语句使用其他方法 ?

问题答案:

原因是OR在查询中使用它通常会使Query
Optimizer放弃使用索引查找并恢复为扫描。如果您查看两个查询的执行计划,则很可能会看到在使用处的扫描,OR并在使用处查找UNION。如果不查看查询,就无法真正给出如何重组OR条件的任何想法。但是您可能会发现,将行插入临时表并连接到临时表可能会产生积极的结果。

另外,通常最好使用UNION ALL而不是UNION如果要所有结果,因为这样可以消除行匹配的成本。



 类似资料:
  • 问题内容: 在 Java 7中 ,对象可以位于语句的表达式中。有人可以从官方文档中解释以下声明吗? 与使用链式if-then-else语句相比,Java编译器通常从使用 String对象的 switch语句生成更有效的字节码。 问题答案: Java代码 具有一个类的两个版本,例如 与: 与: 字节码 让我们看一下字节码。获取版本的字节码: 获取版本的字节码: 结论 在第一个版本中,通过为每个条件调

  • 问题内容: 是否存在OR sqlite语句?我一直在尝试使用google,但是google似乎正在过滤掉 OR 。 例如,如果我想在此表中找到某人(人) 如果名字叫猫王或理查德,我的查询是什么? 我已经尝试过类似的东西,但是总是返回 Eric Sc​​hmidt (我想要的东西正好相反)! 我也尝试过,但是返回表中的 所有 行! 我正在Ubuntu 10.10上使用Python 2.6 sqlit

  • 问题内容: 在Python中使用IF语句时,必须执行以下操作才能使“层叠”正常工作。 检查“等于”时,是否有办法使Python接受多个值?例如, 问题答案: if job in (“mechanic”, “tech”): print “awesome” elif job in (“tool”, “rock”): print “dolt” 括号中的值是一个元组。该运营商检查,看是否右手柄元组内的某处

  • 我试图联合所有大约20个表合并成一个单一的视图。我不断得到一个错误,该错误声明: 如果我将该列注释掉,可以很好地工作。 我尝试将所有列强制转换为相同的数据类型,但没有成功。 我试着注释掉有问题的专栏,这很有效,但我需要那个专栏。 我只尝试了几个表的联合,这取决于文档类型,有时有效,有时无效。

  • 问题内容: 我惊讶地发现Go带有“ goto”语句。我一直被教导说,“ goto”语句已经成为过去,并且因为它阻塞了程序的实际流程,所以它变得邪恶,而函数或方法始终是控制流程的更好方法。 我肯定错过了什么。Google为什么要包含它? 问题答案: 当我们实际检查Go标准库的源代码时,我们可以看到s在哪些地方得到了很好的应用。 例如,在文件中,使用以下语句: 在从导入只是控制流使用的另一(布尔值)的

  • 问题内容: 和之间有什么区别? 问题答案: 删除重复的记录(结果中的所有列均相同),但不删除。 使用而不是时,性能会受到影响,因为数据库服务器必须做额外的工作才能删除重复的行,但是通常您不希望重复(特别是在开发报表时)。 UNION示例: 结果: UNION ALL示例: 结果: