比较查询性能

Comparing query performance

所以我得到一个 table/view 名称或一个 SQL 查询作为输入,我需要对其应用 WHERE 过滤。由于解析现有 WHERE 子句的查询可能需要大量工作,因此我认为最好将传入查询包含在 umbrella [=14= 中] 并像这样附加 WHERE

SELECT * FROM (<ORIGINAL_QUERY_OR_TABLE_NAME>) WHERE <CONDITION>

我怀疑这可能会带来性能损失,因为我现在已经创建了一个子查询,所以我继续为原始查询和修改后的版本创建执行计划。现在我面前有两个计划,但我不确定如何比较它们。两个计划中显示的节点相同,成本显示为父查询的百分比,而不是让我比较两者的绝对数字。

所以我的问题是:

  1. 我这样做真的好吗?即没有性能影响?
  2. 如何比较两个执行计划?

注意:这是 SQL Server 2008 R2。

编辑

对于那些想知道为什么我不简单地通过测试字符串 WHERE 的存在来将带有 AND <CONDITION> 的过滤子句附加到传入查询的人,请注意,这不是全部简单的。考虑以下查询:

1. SELECT * FROM MyTable
2. SELECT * FROM MyTable WHERE MyField = 123
3. SELECT [WHAT], [WHEN], [WHERE] FROM MyTable
4. SELECT * FROM MyTable ORDER BY [WHERE]

为了查看 2 个查询之间的相对性能差异,您可以 运行 一个查询中的两个(或多个)查询,在实际执行计划中您将看到每个查询所占的百分比。

例如,如果您看到第一个查询为 50%,第二个查询为 50%,则表示查询性能相同。在这种情况下,您甚至可能会看到执行计划是相同的。如果您发现一个查询的百分比比另一个高得多,您可以开始查看查询的哪一部分花费的时间最长。