Я вижу странное поведение со следующим запросом 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
?