zoukankan      html  css  js  c++  java
  • Sql 分页

    分页方案一:(利用Not InSELECT 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

    -------------------------------------

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

    -------------------------------------

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

     -------------------------------------

     分页方案四:(利用SqlServer2005中的新特性ROW_NUMBER进行分页)

    Select * FROM (
      select ROW_NUMBER()Over(order by cf_id desc) as rowId,* from T_Test
    ) as mytable
    where rowId between 21 and 40


    其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
    建议优化的时候,加上主键和索引,查询效率会提高。

    通过SQL 查询分析器,显示比较:我的结论是:

    分页方案一:(利用Not InSELECT TOP分页) 效率较高,需要拼接SQL语句

    分页方案二:(利用ID大于多少和SELECT TOP分页)效率次之,需要拼接SQL语句

    分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用

    分页方案四:(利用SqlServer2005中的新特性ROW_NUMBER进行分页) 效率最高,但是仅支持2005以上的版本


  • 相关阅读:
    PHP 获取图片的类型
    Shell 一次性写入多行文本
    LUA笔记
    ubuntu apt-get 出现NO_PUBKEY的解决方案
    Angular2 使用总结
    java多线程体系
    Spring ConversionFailedException: Failed to convert from type java.util.ArrayList<?> to type java.util.List<org.springframework.core.io.Resource>
    Tomcat 插件启动 Web程序
    保存图片
    Ubuntu FTP配置与安装
  • 原文地址:https://www.cnblogs.com/myssh/p/1394981.html
Copyright © 2011-2022 走看看