mssql分页原理及效率分析
2024-09-12 09:36:43
下面是常用的分页,及其分页效率分析。
1.分页方案一:(利用Not In和SELECT TOP分页)
语句形式:
- SELECT TOP 10 *
- FROM TestTable
- WHERE (ID NOT IN
- (SELECT TOP 20 id
- FROM TestTable
- ORDER BY id))
- ORDER BY ID
- SELECT TOP 页大小 *
- FROM TestTable
- WHERE (ID NOT IN
- (SELECT TOP 页大小*页数 id
- FROM 表
- ORDER BY id))
- ORDER BY ID
2.分页方案二:(利用ID大于多少和SELECT TOP分页)
语句形式:
- SELECT TOP 10 *
- FROM TestTable
- WHERE (ID >
- (SELECT MAX(id)
- FROM (SELECT TOP 20 id
- FROM TestTable
- ORDER BY id) AS T))
- ORDER BY ID
- SELECT TOP 页大小 *
- FROM TestTable
- WHERE (ID > (SELECT MAX(id)
- FROM (SELECT TOP 页大小*页数 id
- FROM 表
- ORDER BY id) AS T))
- ORDER BY ID
3.分页方案三:(利用SQL的游标存储过程分页)
- createprocedure SqlPager
- @sqlstr nvarchar(4000), --查询字符串
- @currentpage int, --第N页
- @pagesize int --每页行数
- as
- set nocount on
- declare @P1 int, --P1是游标的id
- @rowcount int
- exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
- select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页
- set @currentpage=(@currentpage-1)*@pagesize+1
- exec sp_cursorfetch @P1,16,@currentpage,@pagesize
- exec sp_cursorclose @P1
- set nocount off
其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
建议优化的时候,加上主键和索引,查询效率会提高。
通过SQL 查询分析器,显示比较:我的结论是:
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句
分页方案三:(利用SQL的游标存储过程分页)效率最差,但是最为通用
最新文章
- AE开发中对GDB以及shapefile的读取、对FeatureClass的相关操作
- 自由缩放属性resize
- 如何点击按钮后在加载外部的Js文件
- oracle数据库什么情况下创建索引比较好
- memcached使用说明
- c++:参数型别的推导
- jquery,js常用特效名称
- .NET 对象序列化和系列化德
- php error _report
- JavaScript 数组对象的去重
- Spring的RestTemplata使用
- 5.创建表,使用alter进行表信息的增删改,Oracle回收站,集合运算
- js_初识js_js基本语法和数据类型
- SQL Server数据库的兼容级别
- 如何让.net程序支持TLS1.2
- Go语言执行流程
- 7-(基础入门篇)关于STM32底层程序使用说明
- PHP输入流 php://input 相关【转】
- 用贪心算法近似求解 Loading Balance 问题(作业调度的负载均衡)
- SSL默认端口时,用http://ip:port/访问出错(转)