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以上的版本


  • 相关阅读:
    IOS 网络浅析-(四 get&post)
    IOS 网络浅析-(三 NSURLConnection代理)
    IOS 网络浅析 (二 网络异步请求)
    IOS 网络浅析(一 网络监测~Reachability)
    IOS 杂笔- 6(KVC-KVO)
    IOS 杂笔-5(NSTimer极浅析)
    IOS 杂笔-4(属性与成员变量的区别)
    No address associated with hostname
    安卓中使用OkHttp发送数据请求的两种方式(同、异步的GET、POST) 示例-- Android基础
    Android中SharedPerforences的简单使用示例 --Android基础
  • 原文地址:https://www.cnblogs.com/myssh/p/1394981.html
Copyright © 2011-2022 走看看