我们在代码中使用带有 linq to sql 的 SQL Server 2005。
当在以下场景中使用 TOP 300 时,我们注意到速度下降(3 分钟而不是 4 秒返回 100 条记录)。
SELECT TOP (300) {fields HERE} FROM {database} WHERE {where clauses with a nested select} ORDER BY {order by values}
这是由 linq 创建的,因为正在调用 .Skip(0).Take(300).ToList<>() 。
当调用 .Skip(300).Take(300).ToList<>() 时,linq 将其转换为 ROW_NUMBER 而不是 TOP 并消除了问题。
linq 是否有不使用 TOP 的解决方法?
我已经阅读了一些关于 TOP 问题的博客,即当您 TOP 获得 101 条或更多记录时,它使用 tempdb 进行排序而不是在内存中进行排序。