我有一个问题,我需要查找具有与值匹配的度量 或 根本没有该度量的记录。我使用JOINs,usingNOT IN和using三种或四种不同的方法解决了该问题NOT EXISTS。但是,每次查询最终都变得非常慢。然后,我尝试将查询一分为二,它们都非常快地运行(三秒钟)。但是使用组合查询OR需要花费超过五分钟的时间。
JOIN
NOT IN
NOT EXISTS
OR
在SO上阅读,我尝试了UNION,速度非常快,但是对于我正在使用的脚本非常不便。
UNION
有两个问题:
MSSQL
原因是OR在查询中使用它通常会使Query Optimizer放弃使用索引查找并恢复为扫描。如果您查看两个查询的执行计划,则很可能会看到在使用处的扫描,OR并在使用处查找UNION。如果不查看查询,就无法真正给出如何重组OR条件的任何想法。但是您可能会发现,将行插入临时表并连接到临时表可能会产生积极的结果。
另外,通常最好使用UNION ALL而不是UNION如果要所有结果,因为这样可以消除行匹配的成本。
UNION ALL