<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    J2EE社區

    茍有恒,何必三更起五更眠;
    最無益,只怕一日曝十日寒.
    posts - 241, comments - 318, trackbacks - 0, articles - 16

    三種SQL分頁法

    Posted on 2009-11-10 11:20 xcp 閱讀(2327) 評論(2)  編輯  收藏 所屬分類: Database

    三種SQL分頁法
    表中主鍵必須為標識列,[ID] int IDENTITY (1,1)

    1.分頁方案一:(利用Not In和SELECT TOP分頁)

    語句形式: 
    SELECT TOP 頁記錄數量 *
    FROM 表名
    WHERE (ID NOT IN
      (SELECT TOP (每頁行數*(頁數-1)) ID
       FROM 表名
       ORDER BY ID))
       ORDER BY ID
    //自己還可以加上一些查詢條件


    例:
    select top 2 *
    from Sys_Material_Type
    where (MT_ID not in
        (select top (2*(3-1)) MT_ID from Sys_Material_Type  order by MT_ID))
    order by MT_ID

     

    2.分頁方案二:(利用ID大于多少和SELECT TOP分頁)

    語句形式:
    SELECT TOP 每頁記錄數量 *
    FROM 表名
    WHERE (ID >
              (SELECT MAX(id)
        FROM (SELECT TOP 每頁行數*頁數 id   FROM 表
               ORDER BY id) AS T)
           )
    ORDER BY ID

    例:
    SELECT TOP 2 *
    FROM Sys_Material_Type
    WHERE (MT_ID >
              (SELECT MAX(MT_ID)
               FROM (SELECT TOP (2*(3-1)) MT_ID
                     FROM Sys_Material_Type
                     ORDER BY MT_ID) AS T))
    ORDER BY MT_ID

     

    3.分頁方案三:(利用SQL的游標存儲過程分頁)
    create  procedure SqlPager
    @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

     

    4.總結:
    其它的方案:如果沒有主鍵,可以用臨時表,也可以用方案三做,但是效率會低。
    建議優化的時候,加上主鍵和索引,查詢效率會提高。

    通過SQL 查詢分析器,顯示比較:我的結論是:
    分頁方案二:(利用ID大于多少和SELECT TOP分頁)效率最高,需要拼接SQL語句
    分頁方案一:(利用Not In和SELECT TOP分頁)   效率次之,需要拼接SQL語句
    分頁方案三:(利用SQL的游標存儲過程分頁)    效率最差,但是最為通用

    本文轉摘自『IT學習者』http://www.itlearner.com/article/2007/3740.shtml




    名稱: ?4C.ESL | .↗Evon
    口號: 遇到新問題?先要尋找一個方案乄而不是創造一個方案こ
    mail: 聯系我


    Feedback

    # re: 三種SQL分頁法  回復  更多評論   

    2009-11-10 14:17 by 劉策
    還是Mysql簡單

    # re: 三種SQL分頁法  回復  更多評論   

    2009-11-12 14:08 by IXR
    有row_number函數可以用吧!
    這個效率在海量數據分頁時是最快的吧!
    主站蜘蛛池模板: 亚洲欧洲日产国产最新| 亚洲国产精品无码久久久秋霞2| 亚洲欧洲免费视频| 久久免费视频网站| 亚洲三级电影网站| 最近中文字幕免费2019| 亚洲高清日韩精品第一区| **一级一级毛片免费观看| 亚洲伦理一二三四| 午夜一级毛片免费视频| 看亚洲a级一级毛片| 国产精品亚洲w码日韩中文| 在线观看片免费人成视频播放| 亚洲级αV无码毛片久久精品| a视频在线观看免费| 99久久精品国产亚洲| 免费无码又黄又爽又刺激| 亚洲中文精品久久久久久不卡| 香蕉视频在线观看免费国产婷婷 | 国产一级大片免费看| 边摸边脱吃奶边高潮视频免费| 亚洲国产成人五月综合网 | 大地影院MV在线观看视频免费| 亚洲AV无码国产在丝袜线观看| 狼群影院在线观看免费观看直播| 亚洲AV无码久久久久网站蜜桃| 国产精品国产午夜免费福利看| 久久免费香蕉视频| 亚洲国产成人精品电影| 免费h黄肉动漫在线观看| 最近免费mv在线观看动漫| 亚洲一区二区三区免费观看| 日韩精品视频免费观看| 成av免费大片黄在线观看| 亚洲另类古典武侠| 亚洲av午夜精品一区二区三区| 日韩中文字幕免费视频| 亚洲Av永久无码精品黑人| 亚洲av无码无在线观看红杏| 成年女人免费视频播放体验区| 精品国产福利尤物免费|