Bei der folgenden T-SQL-Abfrage in SQL Server 2012 tritt ein merkwürdiges Verhalten auf:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
Wenn ich diese Abfrage alleine durchführe, erhalte ich ungefähr 1.300 Ergebnisse in weniger als zwei Sekunden (es gibt einen Volltextindex für Name
).
Wenn ich die Abfrage jedoch in Folgendes ändere:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
OFFSET 0 rows
FETCH NEXT 10 ROWS ONLY
Es dauert mehr als 20 Sekunden, bis ich 10 Ergebnisse erhalte.
Die folgende Abfrage ist noch schlimmer:
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
Es dauert mehr als 1,5 Minuten!
Irgendwelche Ideen?
SELECT TOP 10 * .... ORDER BY Name
?