是什么让其中一个查询更快?

时间:2013-06-04 13:37:34

标签: sql sql-server

我有一个我尝试执行的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

1 个答案:

答案 0 :(得分:5)

在这种情况下,额外的排序操作显然足以让SQL Server使用并行计划。

较慢的一个(没有ORDER BY)是一个串行计划,而较快的一个DegreeOfParallelism的{​​{1}}意味着工作是由24个线程而不是一个线程完成的一。

这解释了尽管排序需要额外的工作,但经过的时间大大减少了。