我有一个我尝试执行的SQL查询(下面)需要10秒才能运行,因为它是在生产环境中我停止了它只是为了确保没有sql锁定
SELECT TOP 1000000 *
FROM Table T
Where CONVERT(nvarchar(max), T.Data) like '%SearchPhrase%' --T.Data is initially XML
现在如果我按照创建时间(我不认为是索引)添加订单,则需要2秒才能完成。
SELECT TOP 1000000 *
FROM Table T
Where CONVERT(nvarchar(max), T.Data) like '%SearchPhrase%' --T.Data is initially XML
order by T.CreatedOn asc
现在踢球者只返回 3000 行,这告诉我即使使用TOP 1000000
它也不会停止在哪些行上仍然会通过所有行
我对SQL服务器的工作原理以及查询解析的工作原理有了基本的了解,但我很困惑为什么在这种情况下,order by会让它更快。
正在运行的服务器是SQL Server 2008 R2
答案 0 :(得分:5)
在这种情况下,额外的排序操作显然足以让SQL Server使用并行计划。
较慢的一个(没有ORDER BY
)是一个串行计划,而较快的一个DegreeOfParallelism
的{{1}}意味着工作是由24个线程而不是一个线程完成的一。
这解释了尽管排序需要额外的工作,但经过的时间大大减少了。