加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL表分页PERFORMANCE …是EF4 Linq SKIP TAKE在性能上与使用TSQ

发布时间:2020-12-12 08:52:57 所属栏目:MsSql教程 来源:网络整理
导读:如果我要从MSSQL表中检索20到39之间的记录,或从40到59. 因为我使用MVC和EF4,性能是一样的,如果我只是做一个Linq查询和Skip()和Take()过程来请求分页….或者更好的做一个GetList()存储过程本身? 解决方法 如果你执行这个linq查询: var data = context.Posts.
如果我要从MSSQL表中检索20到39之间的记录,或从40到59.

因为我使用MVC和EF4,性能是一样的,如果我只是做一个Linq查询和Skip()和Take()过程来请求分页….或者更好的做一个GetList()存储过程本身?

解决方法

如果你执行这个linq查询:
var data = context.Posts.OrderBy(p => p.Id).Skip(20).Take(20).ToList();

它会产生这个SQL:

SELECT TOP (20) 
  [Extent1].[Id] AS [Id],[Extent1].[Text] AS [Text]
FROM ( SELECT 
         [Extent1].[Id] AS [Id],[Extent1].[Text] AS [Text],row_number() OVER (ORDER BY [Extent1].[Id] ASC) AS [row_number]
    FROM [dbo].[Posts] AS [Extent1]
)  AS [Extent1]
WHERE [Extent1].[row_number] > 20
ORDER BY [Extent1].[Id] ASC

这不是像你在存储过程中写入的自定义SQL那样好,但是性能的含义是一样的.分页在数据库上完成.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读