【问题标题】:Multiple OR condition in WHERE clauseWHERE 子句中的多个 OR 条件
【发布时间】:2016-12-20 16:50:27
【问题描述】:

我有一个这样的 where 子句:

WHERE
T1.update_date >= @d 
  OR T2.update_date >= @d
  OR T3.update_date >= @d 
  OR T4.update_date >= @d 
  OR T5.update_date >= @d 
  OR T6.update_date >= @d 
  OR T7.update_date >= @d 
  OR T8.update_date >= @d 
  OR T9.update_date >= @d 
  OR T10.update_date >= @d 
  OR T11.update_date >= @d

我该如何优化它?

【问题讨论】:

  • 为什么需要优化它? SQL Server 具有可以为您执行此操作的优化器。
  • 你认为为什么需要优化?
  • 这些列上有索引吗?另外,你的执行计划是怎么说的?
  • 查询的其余部分呢?你能展示一下吗?另外,这是自加入吗?
  • 好像你有 11 个表在 join .. 请显示 sql 代码 ..

标签: sql sql-server-2012


【解决方案1】:

我们需要查看完整的查询才能为您提供完整的答案。

但是,假设您对表 T 进行了 11 次自联接,您可以通过首先在 CTE 中应用过滤器来简化查询并可能提高性能。

WITH T
AS (
SELECT *
FROM basetable
WHERE Update_date >= @d
)
SELECT *
FROM T AS t1
INNER JOIN T AS t2
    ON t1.Pk = t2.Pk
INNER JOIN T AS t3
    ON t1.Pk = t3.Pk;

如果您在 CTE 中进行过滤,则对 CTE 的所有后续引用都将包含该过滤器。根据查询的其余部分,这可以通过将过滤器限制为单次通过来提高性能。它还可以压缩代码并使其更易于维护。

【讨论】:

  • 对不起,我不能分享所有的查询,我想它也没用。顺便说一句,这不是自加入
猜你喜欢
  • 2017-06-11
  • 1970-01-01
  • 2015-09-29
  • 2015-09-11
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
  • 2018-06-10
相关资源
最近更新 更多