SQL Server 分頁編號的另一種方式

来源:https://www.cnblogs.com/dawenyang/archive/2018/06/06/9143196.html
-Advertisement-
Play Games

今天看書講T-SQL,看到了UNBOUNDED PRECEDING,就想比對下ROW_NUMBER()的運行速度。 sql及相關的結果如下,資料庫中的數據有5W+。 ROW_NUMBER(): 運行結果 UNBOUNDED PRECEDING 運行結果 通過運行之後,看到結果,使用微軟官方提供的方法 ...


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

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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在redis.conf中,在大概65行左右有個loglevel # 指定日誌記錄級別# Redis總共支持四個級別:debug、verbose、notice、warning,預設為verbose# debug 記錄很多信息,用於開發和測試# varbose 有用的信息,不像debug會記錄那麼多# ...
  • ref:ttps://mp.weixin.qq.com/s_biz=MzI4Njg5MDA5NA==&mid=2247484231&idx=1&sn=4cf217a4d692a7aba804e5d96186b15b&chksm=ebd74246dca0cb5024de2f1d9f9e2ecb631e ...
  • 目錄:基礎準備 安裝elasticsearch 安裝 kibana 安裝logstash X-pack插件的安裝 登錄網頁查看 ELK名字解釋 ELK就是ElasticSearch + LogStash + Kibana,這三者是核心套件,但並非全部。 Elasticsearch是個開源分散式搜索引 ...
  • 適合初學linux的人學得比較凌亂的人看這個也能理理思路學得更系統,節約你的學習時間,提高效率 但是思維導圖的作用僅僅是幫人理清思路不會陷入細節中暈掉,細節補充學習請參考http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html以及鳥叔的 ...
  • 適合初學linux的人學得比較凌亂的人看這個也能理理思路學得更系統,節約你的學習時間,提高效率,但是思維導圖的作用是幫人理清思路不會迷失在細節中,細節補充學習請參考https://www.cnblogs.com/peida/archive/2012/12/05/2803591.html以及鳥叔的Li ...
  • 在我看來,emWin和StemWin就是基本相同的庫文件,關於這個庫文件的移植,網路上有很多教材,比如“ALIENTEK emWin開發手冊”,他們家提供了各種STM32系列的開發手冊,我這裡記錄的是關於使用“視窗對象(小工具)”中的“MENU(菜單)”這類小工具在應用過程中,遇到的問題進行記錄,並... ...
  • 事件現象: 最近同事在擴展VG時遇到了“Snapshot origin volumes can be resized only while inactive: try lvchange -an”錯誤 # partprobe # mkfs -t ext3 /dev/sdd3 # pvcreate /d... ...
  • 1、索引:數據排序的方法,快速查詢數據 分類: 唯一索引:不允許有相同值 主鍵索引:自動創建的主鍵對應的索引,命令方式不可刪 聚集索引:物理順序與索引順序一致,只能創建一個 非聚集索引:物理順序與索引順序不一致,可創建多個 複合索引:多列組成 全文索引:特殊功能索引 命令: 創建索引:create ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...