WEB开发网
开发学院数据库MSSQL Server SQL Server SQL语句调优技巧 阅读

SQL Server SQL语句调优技巧

 2007-05-15 09:27:01 来源:WEB开发网   
核心提示: 查看这个子查询方法展示的查询计划:反之,求和查询操作我们可以得到:使用连接是更有效的方案,SQL Server SQL语句调优技巧(2),它不需要额外的流聚合(stream aggregate),即子查询所需在big_sales.qty列的求和,虽然顺序不同,在我们的测试中有两个临时表,U

查看这个子查询方法展示的查询计划:

反之,求和查询操作我们可以得到:

使用连接是更有效的方案。它不需要额外的流聚合(stream aggregate),即子查询所需在big_sales.qty列的求和。

UNION vs UNION ALL

无论何时尽可能用UNION ALL 代替UNION。其中的差异是因为UNION有排除重复行并且对结果进行排序的副作用,而UNION ALL不会做这些工作。选择无重复行的结果需要建立临时工作表,用它排序所有行并且在输出之前排序。(在一个select distinct 查询中显示查询计划将发现存在一个流聚合,消耗百分之三十多的资源处理查询)。当你确切知道你得需要时,可以使用UNION。但如果你估计在结果集中没有重复的行,就使用UNION ALL吧。它只是从一个表或一个连接中选择,然后从另一个表中选择,附加在第一条结果集的底部。UNION ALL不需要工作表和排序(除非其它条件引起的)。在大部分情况下UNION ALL更具效率。一个有潜在危险的问题是使用UNION会在数据库中产生巨大的泛滥的临时工作表。如果你期望从UNION查询中获得大量的结果集时,这就可能发生。

示例

下面的查询是选择pubs数据库中的表sales的所有商店的ID,也选择表big_sales中的所有商店的ID,这个表中我们加入了70,000多行数据。在这两个方案间不同之处仅仅是UNION 与UNION ALL的使用比较。但在这个计划中加入ALL关键字产生了三大不同。第一个方案中,在返回结果集给客户端之前需要流聚合并且排序结果。第二个查询更有效率,特别是对大表。在这个例子中两个查询返回同样的结果集,虽然顺序不同。在我们的测试中有两个临时表。你的结果可能会稍有差异。

上一页  1 2 3 4 5  下一页

Tags:SQL Server SQL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接