SQL性能—在联合之前或之后过滤查询

本文关键字:或之后 过滤 查询 性能 SQL | 更新日期: 2023-09-27 17:49:27

我有一个查询,看起来像这样:

SELECT PersonId,
       Note,
       Amount
FROM Table1 A
WHERE A.PersonId = @PersonId
UNION 
SELECT PersonId,
       Note,
       Amount
FROM Table2 B
WHERE B.PersonId = @PersonId
UNION 
SELECT PersonId,
       Note,
       Amount
FROM Table3 C
WHERE C.PersonId = @PersonId

现在,这个查询最终将返回数千个结果,因此我想构建性能最好的查询。我想知道这是否比在合并之后过滤PersonId更有效,例如:

SELECT * FROM 
(
SELECT PersonId,
       Note,
       Amount
FROM Table1 A
UNION 
SELECT PersonId,
       Note,
       Amount
FROM Table2 B
UNION 
SELECT PersonId,
       Note,
       Amount
FROM Table3 C
) A
WHERE A.PersonId = @PersonId

SQL性能—在联合之前或之后过滤查询

首先,您将有一个查询优化器。
在速度上没有区别,因为PersonId在显示层上。
查询优化器将更改显示参数的执行顺序,以使参数的数量最少。
所以两个查询在速度上是相等的。
如果您感兴趣,可以在SQL开发程序中查看此执行计划。