为什么添加“ORDER BY”会大大减少查询处理时间?

时间:2011-02-19 01:26:30

标签: sql sql-server-2008 optimization parallel-processing

我有一个如下所示的SQL查询,没有最后一个ORDER BY语句,查询运行大约1分钟,并且使用该语句,查询在2秒内完成。

SELECT A.C2, B.C2
FROM
(
  SELECT C1, C2
  FROM A
  WHERE C3 = something AND C2 = somethingelse
  INNER JOIN
  B
  ON
  A.C1 = B.C1
)
ORDER BY B.C2

通过查看执行计划,似乎添加了ORDER BY语句,它会触发并行性。

使用“ORDER BY”,QueryPlan为:DegreeOfParallelism =“4”MemoryGrant =“94176”CachedPlanSize =“184”CompileTime =“35”CompileCPU =“35”CompileMemory =“1728”

没有“ORDER BY”,QueryPlan是:QueryPlan DegreeOfParallelism =“1”MemoryGrant =“2432”CachedPlanSize =“120”CompileTime =“57”CompileCPU =“57”CompileMemory =“2488”

我无法弄清楚幕后的原因。 Normaly我会假设ORDER BY会增加查询处理时间。

[编辑]

B.C2上没有索引,它不是主键或群集键。 A.C1是主键和聚簇索引。 A.C2是空间索引。 A.C3是非聚集索引。 B.C1是主键和聚簇索引。

表A中有4列和4,000万行。 表B中有2列和800万行。

我正在使用Microsoft SQL Server 2008.

谢谢!

0 个答案:

没有答案