zoukankan      html  css  js  c++  java
  • 分页那回事

     

    分页是在做b/s开发当中比较常见的。SQL 2005 当中有了ROW_NUMBER 函数,使分页变的异常简单。同时它自动进行了优化相比较其他几种方法,速度是比较快的。

    分页大体需要3个参数 pagesize(每页显示多少)pagenum(页数) pagecount(总记录数)。

    分页SQL 2000可以用临时表 top 语句 ,游标 等等都可以实现。我们可以测试下

    只写出临时表的

    测试表如下 主键ID name 测试数据10w

    create table sample

    ( id int identity primary key,

     name varchar(8) not null

    )

    declare @n int ,@t datetime

    set @n=1

    set @t=getdate()

    while @n<=100000

    begin

    insert into sample(name)

    select 'a'+cast(@n as varchar)

    set @n=@n+1

    end

    select datediff(ms,@t,getdate())

    本文@pagesize都是从0开始的表示第一页

    临时表如下实现分页存储过程如下::

    create proc [dbo].[pages]

    (

    @pagesize int ,

    @pagenum int ,

    @pagecount int output

    )

    as

    dbcc dropcleanbuffers --从缓存中清除数据

    dbcc freeproccache--清空执行计划

    declare @t datetime

    set @t=getdate()

    declare @table table(tID int identity,SID int)

    insert into @table (SID)

    select id from sample

    select @pagecount=count(*) from @table

    select a.* from

    sample a,@table b

    where a.id=b.sid and tid>@pagesize*@pagenum and tid<=(@pagesize+1)*@pagenum

    select datediff(ms,@t,getdate())

    测试数据为 @pagesize=2 @pagenum=20 总记录数为10w 大体时间为900ms左右 ,不同的电脑数据会有差别,但跟用row_number() 比较还是明显比较大的。

    row_number() 实现分页存储过程如下:

     

    create proc [dbo].[pages_1]

    (

    @pagesize int ,

    @pagenum int ,

    @pagecount int output

    )

    as

    dbcc dropcleanbuffers --从缓存中清除数据

    dbcc freeproccache--清空执行计划

    declare @t datetime

    set @t=getdate()

    with temp as(

    select * ,row_number() over(order by id)as num

    from sample

    )

    select @pagecount= count(*) from temp;

    with temp as(

    select * ,row_number() over(order by id)as num

    from sample

    )

    select * from temp

    where num between @pagesize*@pagenum+1 and (@pagesize+1)*@pagenum;

    select datediff(ms,@t,getdate())

    测试数据为 @pagesize=2 @pagenum=20 总记录数为10w 大体时间为200ms左右 区别还是比较大的 比上面一种快5倍。


    作 者:清水无鱼
    出 处:http://www.cnblogs.com/wzpo/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面 明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Sqlite官方的查询优化文档
    VC++动态链接库(DLL)编程深入浅出(三)转
    用Python查询手机号码归属地
    Delphi使用迅雷的开放下载引擎下载
    Android基础之一
    VC++动态链接库深入浅出(转)
    在Python脚本中使用Delphi控件
    Python与其他语言结合的参数转换函数PyArg_ParseTuple()
    设计模式之模板方法模式(Template)
    设计模式之简单工厂模式(Simple Factory)
  • 原文地址:https://www.cnblogs.com/wzpo/p/1738618.html
Copyright © 2011-2022 走看看