亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SQL SERVER2012新分頁方式

系統(tǒng) 2429 0

SQL SERVER2012在ORDER BY 子句中加入了新元素offset,允許用戶在排序完成的結果集中自定義輸出行范圍,大大簡化了分頁SQL的書寫方式和效率。以下是與以前的兩種分頁方式的簡單對比

        
          use
        
         master


        
          go
        
        
          set
        
         nocount 
        
          on
        
        
          go
        
        
          set
        
         showplan_text 
        
          on
        
        
          go
        
      
        
          --2012的OFFSET分頁方式


        
        
          select
        
        
          number
        
        
          from
        
         spt_values


        
          where
        
         type
        
          =
        
        
          '
        
        
          p
        
        
          '
        
        
          order
        
        
          by
        
        
          number
        
         offset 
        
          10
        
         rows 
        
          fetch
        
        
          next
        
        
          5
        
         rows 
        
          only
        
        ;


        
          go
        
      
        
          --2005的ROW_NUMBER分頁方式


        
        
          select
        
        
          number
        
        
          from
        
         (


        
          select
        
        
          number
        
        ,row_number() 
        
          over
        
        (
        
          order
        
        
          by
        
        
          number
        
        ) 
        
          as
        
         num 
        
          from
        
         spt_values 
        
          where
        
         type
        
          =
        
        
          '
        
        
          p
        
        
          '
        
        

) t 
        
          where
        
         num 
        
          between
        
        
          11
        
        
          and
        
        
          15
        
        
          order
        
        
          by
        
        
          number
        
        
          asc
        
        
          go
        
      
        
          --2000的TOP分頁方式


        
        
          select
        
        
          number
        
        
          from
        
         (


        
          select
        
        
          top
        
        
          5
        
        
          number
        
        
          from
        
         (


        
          select
        
        
          top
        
        
          15
        
        
          number
        
        
          from
        
         spt_values 
        
          where
        
         type
        
          =
        
        
          '
        
        
          p
        
        
          '
        
        
          order
        
        
          by
        
        
          number
        
        
          asc
        
        

) t


        
          order
        
        
          by
        
        
          number
        
        
          desc
        
        

) t 


        
          order
        
        
          by
        
        
          number
        
        
          asc
        
        
          go
        
        
          set
        
         showplan_text 
        
          off
        
        
          go
        
        
          /*
        
        
          

StmtText

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

select number 

from spt_values

where type='p'

order by number offset 10 rows fetch next 5 rows only;



StmtText

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

  |--Top(OFFSET EXPRESSION:((10)),TOP EXPRESSION:((5)))

       |--Index Scan(OBJECT:([mssqlsystemresource].[sys].[spt_values].[ix2_spt_values_nu_nc]),  WHERE:(CONVERT(nchar(3),[mssqlsystemresource].[sys].[spt_values].[type],0)=N'p') ORDERED FORWARD)



StmtText

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

select number from (

select number,row_number() over(order by number) as num from spt_values where type='p'

) t where num between 11 and 15

order by number asc



StmtText

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

  |--Sort(ORDER BY:([mssqlsystemresource].[sys].[spt_values].[number] ASC))

       |--Filter(WHERE:([Expr1005]>=(11) AND [Expr1005]<=(15)))

            |--Top(TOP EXPRESSION:(CASE WHEN (15) IS NULL OR (15)<(0) THEN (0) ELSE (15) END))

                 |--Sequence Project(DEFINE:([Expr1005]=row_number))

                      |--Segment

                           |--Index Scan(OBJECT:([mssqlsystemresource].[sys].[spt_values].[ix2_spt_values_nu_nc]),  WHERE:(CONVERT(nchar(3),[mssqlsystemresource].[sys].[spt_values].[type],0)=N'p') ORDERED FORWARD)



StmtText

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

select number from (

select top 5 number from (

select top 15 number from spt_values where type='p' order by number asc

) t

order by number desc

) t 

order by number asc



StmtText

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

  |--Sort(ORDER BY:([mssqlsystemresource].[sys].[spt_values].[number] ASC))

       |--Sort(TOP 5, ORDER BY:([mssqlsystemresource].[sys].[spt_values].[number] DESC))

            |--Top(TOP EXPRESSION:((15)))

                 |--Index Scan(OBJECT:([mssqlsystemresource].[sys].[spt_values].[ix2_spt_values_nu_nc]),  WHERE:(CONVERT(nchar(3),[mssqlsystemresource].[sys].[spt_values].[type],0)=N'p') ORDERED FORWARD)




        
        
          */
        
      
      
        從查詢計劃來看,2012的查詢計劃中,offset直接操作了top迭代器,分頁計劃十分簡單,看起來也比后兩種簡單明了。
      
    
      
        而在系統(tǒng)預估的查詢開銷中,OFFSET占9%,ROW_NUMBER占45%,TOP占47%(加起來101% -_-||),OFFSET占了絕對的優(yōu)勢。
      
    


在2008的更新中,我最喜歡的是MERGE,2012中就是OFFSET了。

SQL SERVER2012新分頁方式


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲精品日韩中文字幕久久久 | 91成人免费福利网站在线 | 欧美日韩亚洲国产综合 | 日韩在线 | 中文 | 久久综合免费 | 免费一级毛片在级播放 | 99久久国产综合精品五月天 | 国产高清自拍一区 | 国产在线欧美精品中文一区 | 嘿嘿嘿视频免费网站在线观看 | 97午夜视频| 久久天堂网 | 国产一级毛片在线 | 欧美video巨大粗暴18 | a加勒比一本东京 | 亚洲精品国产一区二区 | www.黄网站| 老司机精品久久最新免费 | 中国特级黄一级真人毛片 | 日日摸日日碰夜夜爽久久 | 亚洲精品区一区二区三区四 | 天天玩夜夜操 | 亚洲精品国产v片在线观看 亚洲精品国产啊女成拍色拍 | 中文字幕在线最新在线不卡 | 免费看欧美一级a毛片 | 国产精品高清免费网站 | 亚洲精品资源在线 | 国产欧美日韩高清专区手机版 | 777kkk亚洲综合欧美色老头 | 久久久影院 | a毛片在线 | 大陆国产精品视频 | 亚洲高清在线观看看片 | 国产1000部成人免费视频 | 久久er热这里只有精品免费 | 国产视频一区二区 | 大伊香蕉精品视频在线天堂 | 亚洲久热| 国产乱在线观看视频 | 午夜影视在线 | 一区二区三区欧美在线 |