如何优化sqlserver中的分页存储过程

分类:编程技术 时间:2024-02-20 15:29 浏览:0 评论:0
0
如何优化sqlserver中的分页存储过程?相信很多没有经验的人都一头雾水。本文总结了问题的原因和解决方案。通过这篇文章,希望你能解决这个问题。

代码如下: --Code 1 DECLARE @cc INT SELECT NewsId,ROW_NUMBER() OVER(ORDER BY SortNum DESC) AS RowIndex INTO #tb FROM news WITH(NOLOCK) WHERE NewsTypeId=@NewsTypeId AND IsShow= 1 SET @cc = @@ROWCOUNT SELECT n.* FROM news AS n WITH(NOLOCK), #tb As t WHERE t.RowIndex>@PageIndex*@PageSize AND t.RowIndex<=(@PageIndex+1) *@PageSize AND t.newsid=n.newsid SELECT @cc DROP TABLE #tb 复制代码 代码如下: --Code 2 DECLARE @cc INT SELECT NewsId,ROW_NUMBER() OVER(ORDER BY SortNum DESC) AS RowIndex INTO #tb FROM news with(NOLOCK) WHERE NewsTypeId=@NewsTypeId AND IsShow=1 SET @cc = @@ROWCOUNT SELECT NewsId INTO #tb2 FROM #tb As t WHERE t.RowIndex>@PageIndex*@ PageSize AND t.RowIndex< =(@PageIndex+1)*@PageSize SELECT * FROM news WITH(NOLOCK) WHERE NewsId IN (SELECT * FROM #tb2) SELECT @cc DROP TABLE #tb DROP TABLE #tb2

答案是代码二,比代码一高得多。代码1中加粗的操作会导致全表扫描,因为当数据库引擎认为WHERE表达式中满足条件的记录大于某个阈值时,将不再进行查询优化,直接使用表扫描。查看执行信息:表'news'。扫描计数 1、342 次逻辑读取、0 次物理读取、0 次预读、lob 逻辑读取 0 次、lob 物理读取 0 次、lob 预读 0 次。 (98361 行受影响)(1 行受影响)(40 行受影响)表“#tb________________________________________00000004C024”。扫描计数 1、257 次逻辑读取、0 次物理读取、0 次预读、lob 逻辑读取 0 次、lob 物理读取 0 次、lob 预读 0 次。表“新闻”。扫描次数1,逻辑读2805次,物理读0次,预读235次,lob逻辑读0次,lob物理读取0次,lob预读0次。 (1 row受影响) (1 row受影响) 本来,在执行计划中我想,代码中粗体部分应该集中在索引搜索上,这样性能会提高很多。查看代码 2:表“新闻”。扫描计数 1、342 次逻辑读取、0 次物理读取、0 次预读、lob 逻辑读取 0 次、lob 物理读取 0 次、lob 预读 0 次。 (98361 行受影响)(1 行受影响)表'#tb_________________________________________00000004BEEF'。扫描计数 1、257 次逻辑读取、0 次物理读取、0 次预读、lob 逻辑读取 0 次、lob 物理读取 0 次、lob 预读 0 次。 (40 行受影响) (1 行受影响) (40 行受影响) 表“新闻”。扫描计数 0、131 次逻辑读取、0 次物理读取、0 次预读、lob 0 次逻辑读取、lob 0 次物理读取、lob 预读 0 次。表“#tb2_______________________________00000004BEF0”。扫描计数 1、逻辑读取 2 次、物理读取 0 次、lob 预读 0 次、lob 逻辑读取 0 次、lob physical 读取 0 次,lob 预读 0 次。 (1 row受影响) (1 row受影响) 显然,代码二和代码一的IO操作次数大大减少了。并且代码一的效率会随着@PageIndex越来越大而越来越低;但是代码二的效率不会随着dex的变化而随着@PageInChanges而提高。

看完上面的内容,你是否掌握了如何优化sqlserver中的分页存储过程呢?如果您想学习更多技能或者想了解更多相关内容,请关注行业资讯频道。感谢您的阅读!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何优化sqlserver中的分页存储过程

用户评论