分页算法

原创 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
  • 2466

分页置换算法

常用的有三种:先进先出算法,最佳置换法,最近最少使用置换法。 先进先出算法:由于认为最早调入内存的页不再被使用的可能性要大于刚调入内存的页,因此,先进先出法总是淘汰在内存中停留时间最长的一页,即先进...
  • wang664626482
  • wang664626482
  • 2016年03月09日 22:24
  • 668

分页页码显示算法

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

分页页码显示算法

---这不是分页算法,而是页码显示的算法。 看截图: 这个是分好页之后,页码比较多的时候,可以用这个算法实现这种效果 转载请注明来源,by-潘敬 代码:package com.doma...
  • u010402518
  • u010402518
  • 2013年05月08日 16:59
  • 1784

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

$(function () {     //下一页     $("#nextPage").click(function () {         tableRmove();         var...
  • lxfzgg
  • lxfzgg
  • 2014年03月20日 17:41
  • 3341

浅谈分页置换算法

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

操作系统之分页分段介绍

当直接让进程使用直接的物理内存时,当对物理内存操作时会出现混乱。比如进程A装在0-30的物理内层,在29处是一条ADD指令。而进程B装在30-40处第一条指令为JMP 29.没有使用虚拟内存的话,进程...
  • peace1213
  • peace1213
  • 2015年12月22日 15:10
  • 3619

分页原理以及解决方式

最近又重温了一次分页的任务,不知觉间觉得自己忘记了不少东西。本次将分页的一些自己的心得体会总结如下:   概述:        分页总体原理为在每次点击页数的时候将点击的页数作为参数当前页传递到...
  • zhang6622056
  • zhang6622056
  • 2013年03月07日 15:40
  • 1274

JS实现简单分页,页码显示

分页有许多插件可以实现,现在想试着写一个自己的分页。 分页有这几个问题需要解决,本文先讨论页码显示问题 页码显示  上一页,下一页链接 输入页码(可选) 后台交互 页面显示...
  • u010423904
  • u010423904
  • 2016年03月28日 15:50
  • 7349

内存管理与分页机制

一、问题提出:我们经常会使用malloc()以及free()函数进行堆区内存申请与释放。那么你是否会这样做:int * p = malloc(0);/*malloc分配了0个字节吗,如果是那么p指向谁...
  • Apollon_krj
  • Apollon_krj
  • 2016年12月25日 12:25
  • 763
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分页算法
举报原因:
原因补充:

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