Я вижу странное поведение со следующим запросом T-SQL в SQL Server 2012:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
Только выполнение этого запроса дает мне около 1300 результатов менее чем за две секунды (включен полнотекстовый индекс Name)
Однако, когда я изменяю запрос на это:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
OFFSET 0 rows
FETCH NEXT 10 ROWS ONLY
Требуется больше 20 секунд, чтобы дать мне 10 результатов.
Следующий запрос еще хуже:
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 RowNum
Это займет более 1,5 минут!
Есть идеи?
Медленный план

Быстрый план

SELECT TOP 10 * .... ORDER BY Name?