首页>>数据库>>SQLServer分页三种方案及其查询性能优劣比较
SQLServer分页三种方案及其查询性能优劣比较
来源: 时间: 2014-12-19 21:18:48

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的游标存储过程分页)

 create  procedure 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的游标存储过程分页)    效率最差,但是最为通用


本页地址:http://www.easytd.com/shujuku/d_14121921177.html

上一篇:MYSQL数据库经常使用的命令 下一篇:SQL语句实现行转列的实例方法