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

时间:2016-06-25 17:27:30

标签: c# query-performance

我有一个如下所示的查询:

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

1 个答案:

答案 0 :(得分:0)

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