通过比较连接和子查询说明分支步骤
一条正确的老规则是:在结果集相同的情况下,连接比子查询具有更好的性能。
|
在这种情况下,查询引擎选择一个嵌套循环操作。这个查询被迫用聚集索引读取整个authors表,在处理中执行大量的逻辑页读。
注意:在带分支步骤的查询中,缩进行给你展示那些步骤是其它步骤的分支。
|
上面的这个查询中,titleauthors表逻辑读的数字上升而authors表下降。注意到,stream aggregation在查询计划中位置更高,即发生的更晚。
比较查询计划
可以使用查询计划比较两个不同查询的相对效果。如,你可能想知道是否一个查询比另一个查询增加了额外的开销或者选择了不同的索引策略。
在这个例子中,我们比较两个查询。第一个使用SUBSTRING第二个使用LIKE。
|
与使用LIKE的相似查询相比较:
|
很明显,第二个查询使用INDEX SEEK操作,第一个查询使用了CLUSTERED INDEX SCAN操作,第二个查询计划比第一个更简单。
当我们比较查询计划中那一个最好时,事实上我们更愿意用SET STATISTICS PROFILE ON或SQL Query Analyzer的Graphic Execution Plan(图形执行计划)特性而不是SET SHOWPLAN_TEXT ON。这些工具将以百分率的方式明确给你展示每一个查询计划步骤的处理消耗。这可以告诉你每种选择的或多或少的查询消耗情况。你还可以同时运行两个或更多查询来看哪个执行的最好。
为了获得最全面的性能测量信息,使用SET STATISTICS IO 和SET STATISTICS TIME也是很重要的。
