Widzę dziwne zachowanie w przypadku następującego zapytania T-SQL w programie SQL Server 2012:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
Samo wykonanie tego zapytania daje mi około 1300 wyników w mniej niż dwie sekundy (włączony jest indeks pełnotekstowy Name
)
Jednak po zmianie zapytania na to:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
OFFSET 0 rows
FETCH NEXT 10 ROWS ONLY
Daje mi 10 wyników dłużej niż 20 sekund.
Następujące zapytanie jest jeszcze gorsze:
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
Wykonanie zajmuje ponad 1,5 minuty!
Jakieś pomysły?
SELECT TOP 10 * .... ORDER BY Name
?