通过观察执行计划,我们发现以前的执行计划在许多大型表连接中使用哈希连接。由于涉及大量数据的表,查询优化器选择使用并行执行速度更快。我们可以优化你的执行计划,因为该指数的存在,和数据表非常大,滤波值在很宽的范围内的统计信息来估计的行数步,偏差(实际的过滤条件是15000,平均步估计数量大约是800线),所以查询优化器选择循环连接,并没有选择并行执行,所以执行时间不。

语句在存储过程中实现的,所以我们使用语句直接到一个未公开查询提示,并行开销减少到0的强制性门槛的查询,使报表逼走平行,语句执行时间从20秒减少到5秒(注:哈希连接的是7秒使用)。

这里是一个简单的例子来说明使用这种提示的效果,在这个例子中的T-SQL所示,在1的代码清单所示:


*选择
{ }从AdventureWorks。{销售}。{ salesorderdetail }一
{ SalesOrderHeader B }内加入销售。
在a.salesorderid = b.salesorderid



代码清单1。

默认情况下,语句不并行,执行计划如图1所示。


图1。

接下来,我们向语句添加提示,如清单2所示。


*选择
{ }从AdventureWorks。{销售}。{ salesorderdetail }一
{ SalesOrderHeader B }内加入销售。
在a.salesorderid = b.salesorderid
期权(querytraceon 8649)



代码清单2。

执行计划与提示符平行,如图2所示。


图2。

当面对一些复杂的DSS、OLAP查询,可以考虑使用未公开暗示,SQL Server使用平行尽可能,从而减少执行时间。