1. <wbr id="m8vu6"></wbr>

      <del id="m8vu6"><center id="m8vu6"><source id="m8vu6"></source></center></del>
        <p id="m8vu6"><sub id="m8vu6"></sub></p>

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

        • 2019-04-29 22:50 來源:未知

        今天看書講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()這個方法做了優化,可能是有緩存,讀取的緩存中的數據然后進行分頁。

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

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