ฉันเห็นพฤติกรรมแปลก ๆ ด้วยแบบสอบถาม T-SQL ต่อไปนี้ใน SQL Server 2012:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
การดำเนินการค้นหานี้เพียงอย่างเดียวทำให้ฉันมีผลลัพธ์ประมาณ 1,300 รายการในเวลาน้อยกว่าสองวินาที (มีดัชนี fulltext เปิดอยู่Name
)
อย่างไรก็ตามเมื่อฉันเปลี่ยนแบบสอบถามเป็น:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
OFFSET 0 rows
FETCH NEXT 10 ROWS ONLY
ใช้เวลามากกว่า 20 วินาทีในการให้ผลลัพธ์ 10 รายการ
แบบสอบถามต่อไปนี้ยิ่งแย่ลง:
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
ใช้เวลามากกว่า 1.5 นาทีจึงจะเสร็จสมบูรณ์!
ความคิดใด ๆ
SELECT TOP 10 * .... ORDER BY Name
?