比较查询性能

时间:2015-01-04 06:51:02

标签: sql sql-server performance tsql

所以我将表/视图名称或SQL查询作为输入,我需要对其应用WHERE过滤。由于解析已存在的WHERE子句的查询可能相当有用,我想我最好将传入的查询封装到 SELECT并将WHERE添加到其中:

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

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

所以我的问题是:

  1. 我真的是这样做的好方法;即没有表演命中?
  2. 如何比较两个执行计划?
  3. 注意:这是SQL Server 2008 R2。

    修改

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

    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]
    

1 个答案:

答案 0 :(得分:0)

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

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