Tôi đang thấy một số hành vi lạ với truy vấn T-SQL sau trong SQL Server 2012:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
Chỉ thực hiện truy vấn này mang lại cho tôi khoảng 1.300 kết quả trong vòng chưa đầy hai giây (có chỉ mục toàn văn bản trên Name
)
Tuy nhiên, khi tôi thay đổi truy vấn này:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
OFFSET 0 rows
FETCH NEXT 10 ROWS ONLY
Phải mất hơn 20 giây để cho tôi 10 kết quả.
Các truy vấn sau đây thậm chí còn tồi tệ hơn:
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
Phải mất hơn 1,5 phút để hoàn thành!
Có ý kiến gì không?
SELECT TOP 10 * .... ORDER BY Name
?