Saya melihat beberapa perilaku aneh dengan kueri T-SQL berikut di SQL Server 2012:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
Melaksanakan kueri ini sendiri memberi saya sekitar 1.300 hasil dalam waktu kurang dari dua detik (ada indeks teks lengkap aktif Name)
Namun, ketika saya mengubah kueri untuk ini:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
OFFSET 0 rows
FETCH NEXT 10 ROWS ONLY
Butuh lebih dari 20 detik untuk memberi saya 10 hasil.
Permintaan berikut bahkan lebih buruk:
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
Selesai lebih dari 1,5 menit!
Ada ide?
Rencana lambat

Rencana cepat

SELECT TOP 10 * .... ORDER BY Name?