分页算法

原创 2007年10月11日 14:16:00

1. 利用存储过程数据库是(sqlserver 2005)
       CREATE PROCEDURE [dbo].[GetUsers] --得到用户列表,注意这里的参数
    @RowIndex int,
    
@RecordCount int
     
AS
        BEGIN
    
SET NOCOUNT ON;

    
With VUsers as (
        
select *,row_number() over (order by UserID descas RowNum
        
from MyUsers 
)

    
select * from VUsers 
    
where RowNum > @RowIndex and RowNum <= (@RowIndex+@RecordCount)    
END
2.   分页方案一:(利用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

3.分页方案二:(利用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

4.分页方案三:(利用SQL的游标存储过程分页)
create  procedure XiaoZhengGe
@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的游标存储过程分页)    效率最差,但是最为通用

在实际情况中,要具体分析。

5. 通用分页实现及其OO设计探讨
6 .AspNetPager,asp.net分页的最终解决方案! 
AspNetPager免费分页控件,为asp.net web应用程序提供分页的最终解决方案...
www.webdiyer.com/ 5K 2007-7-8 - 百度快照

 

分页显示算法

分页算法应该在以后的开发中会经常用到。这里记录一下:分页算法使用的底层实现是limit关键字。 public ArrayList listUsers(int pagenow,int count)...
  • qq_16811963
  • qq_16811963
  • 2016-07-26 16:36:16
  • 2745

百度和谷歌的分页算法

一句话总结:当前页数比开始页数大10,当前页数比本页的最后页数小9,每页显示20条记录。 ...
  • sunshine_love
  • sunshine_love
  • 2012-11-01 18:03:43
  • 1154

模拟百度分页算法实现

定义变量 pageSize 每一页显示的记录条件 pageNow 当前页,初始默认值为1 pageCount 总页数,有pageSize和数据库总记录数决定公式:res= select coun...
  • shijiebei2009
  • shijiebei2009
  • 2015-03-15 17:06:57
  • 2557

PHP分页算法详解

所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始 的参数: 每页多少条记录($PageSize)? 当前是第几页($CurrentPageID)? 现在只要再给我一个...
  • sunnykobe8
  • sunnykobe8
  • 2006-05-17 13:58:00
  • 2200

分页页码显示算法

/** * 获取分页的HTML内容 * @param integer $page 当前页 * @param integer $pages 总页数 * @param string $ur...
  • a771948524
  • a771948524
  • 2014-05-04 09:04:24
  • 1102

纯js写分页 (算法把我纠结住了)

$(function () {     //下一页     $("#nextPage").click(function () {         tableRmove();         var...
  • lxfzgg
  • lxfzgg
  • 2014-03-20 17:41:45
  • 3476

浅谈分页置换算法

这是最近做完上学期的操作系统的课程设计,想起可以上BLOG写点什么,以防自己学无所获,弄完就忘记。...
  • u014214389
  • u014214389
  • 2015-04-07 14:31:36
  • 504

Java分页算法_3个最常用的

介绍三个最常用的分页算法 First(感觉这个最简单实用)//总记录数 int rows=21; //每页显示的记录数 int pageCount=5; //页数 int sum=(rows...
  • u011595939
  • u011595939
  • 2017-04-17 15:56:24
  • 5824

几种分页算法。翻页必备

经典的:参考这里:海量数据库的查询优化及分页算法方案 http://dev.csdn.net/article/43/43936.shtm 1.“俄罗斯存储过程”的改良版CREATE procedure...
  • mabaocheng
  • mabaocheng
  • 2005-12-16 08:50:00
  • 10181

Latex写论文中,算法过长,需要分页显示的方法

在写论文的过程中,我们经常遇到在写算法框架时,由于算法太长,常常占据一个页面,这样导致后续排版时候不美观同时与前文没有很好的衔接的情况,为此搜索了一下解决方法,比较有效的方法如下:\documentc...
  • rechardchen123
  • rechardchen123
  • 2017-12-21 01:06:26
  • 872
收藏助手
不良信息举报
您举报文章:分页算法
举报原因:
原因补充:

(最多只允许输入30个字)