5

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

4

1 回答 1

5

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

较慢的(不带ORDER BY)是串行计划,而较快DegreeOfParallelism的则24意味着工作由 24 个线程完成,而不仅仅是一个线程。

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

于 2013-06-04T14:50:46.423 回答