Je constate un comportement étrange avec la requête T-SQL suivante dans SQL Server 2012:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
L'exécution de cette requête seule me donne environ 1 300 résultats en moins de deux secondes (il y a un index en texte intégral sur Name
)
Cependant, lorsque je change la requête en ceci:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
OFFSET 0 rows
FETCH NEXT 10 ROWS ONLY
Il me faut plus de 20 secondes pour me donner 10 résultats.
La requête suivante est encore pire:
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
Il faut plus de 1,5 minutes pour terminer!
Des idées?
SELECT TOP 10 * .... ORDER BY Name
?