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

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

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

    J2EE社區(qū)

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

    三種SQL分頁法

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

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

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

    語句形式: 
    SELECT TOP 頁記錄數(shù)量 *
    FROM 表名
    WHERE (ID NOT IN
      (SELECT TOP (每頁行數(shù)*(頁數(shù)-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 每頁記錄數(shù)量 *
    FROM 表名
    WHERE (ID >
              (SELECT MAX(id)
        FROM (SELECT TOP 每頁行數(shù)*頁數(shù) 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的游標(biāo)存儲(chǔ)過程分頁)
    create  procedure SqlPager
    @sqlstr nvarchar(4000), --查詢字符串
    @currentpage int, --第N頁
    @pagesize int --每頁行數(shù)
    as
    set nocount on
    declare @P1 int, --P1是游標(biāo)的id
     @rowcount int
    exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1, @rowcount=@rowcount output
    select ceiling(1.0*@rowcount/@pagesize) as 總頁數(shù)--,@rowcount as 總行數(shù),@currentpage as 當(dāng)前頁
    set @currentpage=(@currentpage-1)*@pagesize+1
    exec sp_cursorfetch @P1,16,@currentpage,@pagesize
    exec sp_cursorclose @P1
    set nocount off

     

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

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

    本文轉(zhuǎn)摘自『IT學(xué)習(xí)者』http://www.itlearner.com/article/2007/3740.shtml




    名稱: ?4C.ESL | .↗Evon
    口號(hào): 遇到新問題?先要尋找一個(gè)方案乄而不是創(chuàng)造一個(gè)方案こ
    mail: 聯(lián)系我


    Feedback

    # re: 三種SQL分頁法  回復(fù)  更多評(píng)論   

    2009-11-10 14:17 by 劉策
    還是Mysql簡(jiǎn)單

    # re: 三種SQL分頁法  回復(fù)  更多評(píng)論   

    2009-11-12 14:08 by IXR
    有row_number函數(shù)可以用吧!
    這個(gè)效率在海量數(shù)據(jù)分頁時(shí)是最快的吧!
    主站蜘蛛池模板: 亚洲一区二区三区高清视频| 亚洲成a人一区二区三区| 蜜桃AV无码免费看永久| 日本在线看片免费| 另类免费视频一区二区在线观看| 国内永久免费crm系统z在线 | 四虎影视免费永久在线观看| 97无码免费人妻超级碰碰碰碰 | av永久免费网站在线观看| a级黄色毛片免费播放视频| 东方aⅴ免费观看久久av| 无码少妇精品一区二区免费动态 | 一级毛片免费播放男男| 三级黄色片免费看| 日韩免费无码一区二区三区 | 久青草视频97国内免费影视| 99久久成人国产精品免费 | 性色av极品无码专区亚洲| 日本亚洲高清乱码中文在线观看| 另类专区另类专区亚洲| 亚洲精品偷拍视频免费观看| 日韩视频在线观看免费| 日本免费xxxx| 免费a级毛片视频| 亚洲精品亚洲人成人网| 亚洲日本香蕉视频观看视频| 亚洲日韩一区精品射精| 思思久久99热免费精品6| 在线观看片免费人成视频无码| 69国产精品视频免费| 德国女人一级毛片免费| 亚洲欧洲精品成人久久奇米网| 国产成人A人亚洲精品无码| 亚洲成aⅴ人片在线观| 精品亚洲福利一区二区| 中国在线观看免费的www| ww4545四虎永久免费地址| 国产女高清在线看免费观看| 亚洲国产精品无码久久久不卡| 亚洲国产视频一区| 黄色a三级免费看|