<rp id="wnpn7"><ruby id="wnpn7"></ruby></rp>
<progress id="wnpn7"><track id="wnpn7"><rt id="wnpn7"></rt></track></progress>
<ruby id="wnpn7"></ruby>
<ruby id="wnpn7"><blockquote id="wnpn7"><div id="wnpn7"></div></blockquote></ruby>

    1. <em id="wnpn7"><ruby id="wnpn7"><input id="wnpn7"></input></ruby></em>
      1. <button id="wnpn7"><acronym id="wnpn7"></acronym></button><button id="wnpn7"><acronym id="wnpn7"></acronym></button>

        <rp id="wnpn7"><acronym id="wnpn7"></acronym></rp>

        <li id="wnpn7"><object id="wnpn7"><u id="wnpn7"></u></object></li>
        VB.net 2010 視頻教程 VB.net 2010 視頻教程 python基礎視頻教程
        SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
        當前位置:
        首頁 > 數據庫 > sql語句 >
        • sql語句大全之SQL Server 分頁編號的另一種方式

         

        今天看書講T-SQL,看到了UNBOUNDED PRECEDING,就想比對下ROW_NUMBER()的運行速度。

        sql及相關的結果如下,數據庫中的數據有5W+。

        ROW_NUMBER():

        復制代碼
        SET STATISTICS TIME ON
        
        SELECT
            ROW_NUMBER() OVER(ORDER BY Id DESC) rn,Id
        FROM
            dbo.T_MyCourse
        復制代碼

        運行結果

        UNBOUNDED PRECEDING

        復制代碼
        SET STATISTICS TIME ON
        
        SELECT
            SUM(1) OVER(ORDER BY Id DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) rn,Id
        FROM
            dbo.T_MyCourse
        復制代碼

        運行結果

        通過運行之后,看到結果,使用微軟官方提供的方法進行編號排序,速度明顯的提高。

        不過我使用上述方法進行分頁獲取數據的時候結果又有點不一樣。

        分頁獲取數據:

        ROW_NUMBER() 分頁獲取數據:

        復制代碼
        SET STATISTICS TIME ON
        
        SELECT
            *
        FROM
            (
            SELECT
                ROW_NUMBER() OVER(ORDER BY Id DESC) rn,Id
            FROM
                dbo.T_MyCourse
            )a
        WHERE
            a.rn BETWEEN 55 AND 444
        復制代碼

         

         執行sql命令:DBCC DROPCLEANBUFFERS ,清除數據庫緩存后的結果

         

        UNBOUNDED分頁獲取數據:

        復制代碼
        SET STATISTICS TIME ON
        
        SELECT
            *
        FROM
            (
            SELECT
                SUM(1) OVER(ORDER BY Id DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) rn,Id
            FROM
                dbo.T_MyCourse
            )a
        WHERE
            a.rn BETWEEN 22 AND 444
        復制代碼

         UNBOUNDED這個方式下執行了DBCC DROPCLEANBUFFERS 清除緩存的sql也沒有用,執行時間沒有變化。

         通過上述結果,看到ROW_NUMBER()獲取分頁的數據明顯更快,我猜測是微軟對ROW_NUMBER()這個方法做了優化,可能是有緩存,讀取的緩存中的數據然后進行分頁。

        如果有知道的網友,請評論告訴我,讓我學習學習。

        相關教程
                
        免费看成年人视频大全_免费看成年人视频在线观看