所以我将表/视图名称或SQL查询作为输入,我需要对其应用WHERE
过滤。由于解析已存在的WHERE
子句的查询可能相当有用,我想我最好将传入的查询封装到伞 SELECT
并将WHERE
添加到其中:
SELECT * FROM (<ORIGINAL_QUERY_OR_TABLE_NAME>) WHERE <CONDITION>
我怀疑这可能会引入性能损失,因为我现在已经创建了一个子查询,因此我继续为原始查询和修改后的版本创建执行计划。我现在面前有两个计划,但我不确定如何比较它们。两个计划中显示的节点是相同的,成本显示为父查询的百分比,而不是一些绝对数字,让我比较两者。
所以我的问题是:
注意:这是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]
答案 0 :(得分:0)
为了查看2个查询之间的相对性能差异,您可以在一个查询中运行两个(或更多)查询,而在实际执行计划中,您将看到每个查询所占的百分比。
例如,如果您看到第一个查询的50%和第二个查询的50%,则表示查询性能相同。在这种情况下,您甚至可能会看到执行计划是相同的。如果您发现一个查询的百分比远高于另一个查询,则可以开始查看查询的哪个部分花费的时间最长。