一尘不染

为什么UNION比OR语句快?

sql

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

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

有两个问题:

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

阅读 218

收藏
2021-03-10

共1个答案

一尘不染

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

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

2021-03-10