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
か?