我有一个如下所示的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.
谢谢!