我有一个如下所示的查询:
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
答案 0 :(得分:0)
首先,您将拥有一个查询优化器 速度没有区别,因为PersonId在显示层上 查询优化器将更改显示参数的执行顺序,以便存在最少量的参数 因此两个查询的速度相等 如果您感兴趣,可以在SQL开发人员中看到此执行计划。