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