mne*_*nic 1 sql-server subquery where
我需要提高 WHERE 子句中多个子查询的效率。上下文是现有产品的报告生成器。 我可以提供的唯一输入是 WHERE 子句。我有 3 个几乎相同的子查询,它们之间只有 1 个不同。我需要验证至少有 1 条记录符合每个条件。
这是查询的要点
Where
Exists (Select 1 From t1 ...etc... where ...etc... and fld1='X')
AND
Exists (Select 1 From t1 ...etc... where ...etc... and fld1='Y')
AND
Exists (Select 1 From t1 ...etc... where ...etc... and fld1='Z')
Run Code Online (Sandbox Code Playgroud)
3 个子查询中的每一个中的“选择”都是相同的。它确实加入并在它的 Where 子句中有其他字段,包括对来自外部查询的 PK 的引用:我只显示不同之处。
t1 中大约有 50 万条记录。上面的查询现在已经运行了 30 多分钟。我需要把它缩短到 30 秒。
我的选择非常有限——没有 DECLARE,没有临时表,没有“OVER”。
如果没有看到完整的架构和查询,就很难确定要处理执行计划。但你可以试试:
Where (Select Count(Distinct fld1) From t1 ...etc... where ...etc... and fld1 In ('X', 'Y', 'Z')) = 3