Sql WHERE子句中的多重或条件

Sql WHERE子句中的多重或条件,sql,sql-server-2012,Sql,Sql Server 2012,我有这样一个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 >=

我有这样一个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

我怎样才能优化它呢?

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

但是,假设您对表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的所有后续引用都将包含该筛选。根据查询的其余部分,这可以通过将筛选器限制为一次来提高性能。它还压缩了代码并使其更易于维护。

为什么需要对其进行优化?SQL Server有一个优化器可以为您执行此操作。您认为为什么需要对其进行优化?这些列上有索引吗?另外,您的执行计划说明了什么?查询的其余部分呢?你能给我看看吗?另外,这是自联接吗?似乎有11个表在联接中。。请显示sql代码。很抱歉,我无法共享所有查询,而且我猜它是无用的。顺便说一下,这不是一个自动连接