Estou vendo algum comportamento estranho com a seguinte consulta T-SQL no SQL Server 2012:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
Somente a execução dessa consulta fornece cerca de 1.300 resultados em menos de dois segundos (existe um índice de texto completo Name
)
No entanto, quando altero a consulta para isso:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
OFFSET 0 rows
FETCH NEXT 10 ROWS ONLY
Demora mais de 20 segundos para me dar 10 resultados.
A seguinte consulta é ainda pior:
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
Demora mais de 1,5 minutos para concluir!
Alguma ideia?
SELECT TOP 10 * .... ORDER BY Name
?