SQL Server 2012의 다음 T-SQL 쿼리에서 이상한 동작이 나타납니다.
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
이 쿼리 만 실행하면 2 초 안에 약 1,300 개의 결과를 얻을 수 있습니다 (에 대한 전체 텍스트 색인이 있음 Name
)
그러나 쿼리를 다음과 같이 변경하면
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
OFFSET 0 rows
FETCH NEXT 10 ROWS ONLY
10 개의 결과를 얻으려면 20 초 이상이 걸립니다.
다음 쿼리는 더 나쁩니다.
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
?