Sql WHERE子句中的多重或条件
我有这样一个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
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代码。很抱歉,我无法共享所有查询,而且我猜它是无用的。顺便说一下,这不是一个自动连接