LINQ 是否跳过&拿有不错的表现吗?
我们查询了大约40个与客户相关的数据字段。该查询通常会返回大量记录,例如最多 20,000 条。我们只想使用前 500 个结果。然后,我们只希望能够一次翻阅 10 个。
LINQ 是否跳过并为此采取合理的方法?使用这种方法与以其他方式手动执行相比是否存在任何潜在的性能问题?
We have a query for about 40 data fields related to customers. The query will often return a large amount of records, say up to 20,000. We only want to use say around the first 500 results. Then, we just want to be able to page through them 10 at a time.
Is LINQ skip and take a reasonable approach for this? Are there any potentnialy performance issues with using this approach vs doing it manually some other way?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不带
Skip()
的Take()
使用TOP
子句生成 SQL。Take()
与Skip
使用ROW_NUMBER()
生成 SQL,如图 此处。另外,我建议使用优秀的 LINQPad 工具或 LINQ to SQL 日志记录来检查生成的查询。
Take()
withoutSkip()
generates SQL usingTOP
clause.Take()
withSkip
generates SQL usingROW_NUMBER()
as shown here.Also, I'd recommend to use excellent LINQPad tool or LINQ to SQL logging to check generated queries.
是的,如果您使用的是 SQL Server 2005+,它将生成使用
ROW_NUMBER()
函数来提高分页效率的 SQL(与 Scott 在本博文中使用)。Yes, if you're on SQL Server 2005+ it'll generate SQL that uses the
ROW_NUMBER()
function to make paging efficient (not unlike the SQL that Scott uses in this blog post).