コードでlinq to sqlを使用してSQL Server 2005を使用しています。
次のシナリオで TOP 300 を使用すると、速度が低下することに気付きました (100 レコードで 4 秒のリターンに対して 3 分)。
SELECT TOP (300) {fields HERE} FROM {database} WHERE {where clauses with a nested select} ORDER BY {order by values}
.Skip(0).Take(300).ToList<>() が呼び出されているため、これは linq によって作成されています。
.Skip(300).Take(300).ToList<>() が呼び出されると、linq はそれを TOP ではなく ROW_NUMBER に変換し、問題は解消されます。
TOPを使用しないlinqの回避策はありますか?
TOPの問題についていくつかのブログを読んだことがあります.101レコード以上をTOPすると、メモリではなくtempdbを使用してソートされます。