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