我在 SQL Server 2012 中看到以下 T-SQL 查询的一些奇怪行为:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
Run Code Online (Sandbox Code Playgroud)
单独执行这个查询在不到两秒的时间内给了我大约 1,300 个结果(有一个全文索引Name)
但是,当我将查询更改为:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
OFFSET 0 rows
FETCH NEXT 10 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
给我10个结果需要20多秒。
下面的查询更糟糕:
SELECT Id
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY Name) AS RowNum, Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"') ) AS RowConstrainedResult
WHERE RowNum >= 0 AND RowNum < 11
ORDER BY …Run Code Online (Sandbox Code Playgroud)