校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > sqlserver關于分頁存儲過程的優化【讓數據庫按我們的意思執行查詢計劃】

sqlserver關于分頁存儲過程的優化【讓數據庫按我們的意思執行查詢計劃】

熱門標簽:如何做地圖標注圖鋪 沒聽見電話機器人幫你接 成都電話外呼系統一般多少錢 最新人工智能電銷機器人 銀川高頻外呼回撥系統多少錢 數字匠心電銷機器人 蘭州語音外呼系統運營商 陜西電銷外呼系統好用嗎 al智能電話機器人
復制代碼 代碼如下:

--代碼一DECLARE @cc INT
SELECT NewsId,ROW_NUMBER() OVER(ORDER BY SortNum DESC) AS RowIndex INTO #tb FROM news WITH(NOLOCK) WHERE NewsTypeId=@NewsTypeId AND IsShow=1
SET @cc = @@ROWCOUNT
SELECT n.* FROM news AS n WITH(NOLOCK), #tb As t WHERE t.RowIndex>@PageIndex*@PageSize AND t.RowIndex=(@PageIndex+1)*@PageSize AND t.newsid=n.newsid
SELECT @cc
DROP TABLE #tb

復制代碼 代碼如下:

--代碼二
DECLARE @cc INT
SELECT NewsId,ROW_NUMBER() OVER(ORDER BY SortNum DESC) AS RowIndex INTO #tb FROM news WITH(NOLOCK) WHERE NewsTypeId=@NewsTypeId AND IsShow=1
SET @cc = @@ROWCOUNT
SELECT NewsId INTO #tb2 FROM #tb As t WHERE t.RowIndex>@PageIndex*@PageSize AND t.RowIndex=(@PageIndex+1)*@PageSize
SELECT * FROM news WITH(NOLOCK) WHERE NewsId IN (SELECT * FROM #tb2)
SELECT @cc
DROP TABLE #tb
DROP TABLE #tb2

答案是代碼二遠遠高于代碼一。在代碼一中加粗代碼的操作會引起整表掃描,因為數據庫引擎在認為WHERE表達式中滿足條件記錄大于一定閥值的時候,就不再去進行查詢優化,而直接使用表掃描。看執行信息,:
表 'news'。掃描計數 1,邏輯讀取 342 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。
(98361 行受影響)
(1 行受影響)
(40 行受影響)
表 '#tb________________________________________00000004C024'。掃描計數 1,邏輯讀取 257 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。
表 'news'。掃描計數 1,邏輯讀取 2805 次,物理讀取 0 次,預讀 235 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。
(1 行受影響)
(1 行受影響)

原本,我想的執行計劃,加粗部分的代碼應該是聚焦索引查找,這樣性能就提高很多。看代碼二:
表 'news'。掃描計數 1,邏輯讀取 342 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。
(98361 行受影響)
(1 行受影響)
表 '#tb____________________________________00000004BEEF'。掃描計數 1,邏輯讀取 257 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。
(40 行受影響)
(1 行受影響)
(40 行受影響)
表 'news'。掃描計數 0,邏輯讀取 131 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。
表 '#tb2___________________________________00000004BEF0'。掃描計數 1,邏輯讀取 2 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。
(1 行受影響)
(1 行受影響)

很明顯,代碼二與代碼一中的IO操作數大大降低。且代碼一隨著@PageIndex越來越大,效率會越來越低;但代碼二的效率不會隨@PageIndex變化而改變。
您可能感興趣的文章:
  • SQLSERVER分頁查詢關于使用Top方式和row_number()解析函數的不同
  • 詳解SQLServer和Oracle的分頁查詢
  • sqlserver2005利用臨時表和@@RowCount提高分頁查詢存儲過程性能示例分享
  • 高效的SQLSERVER分頁查詢(推薦)
  • 真正高效的SQLSERVER分頁查詢(多種方案)
  • oracle,mysql,SqlServer三種數據庫的分頁查詢的實例
  • sqlserver分頁查詢處理方法小結

標簽:宜春 巴彥淖爾 邢臺 鹽城 朔州 通化 本溪 遼源

巨人網絡通訊聲明:本文標題《sqlserver關于分頁存儲過程的優化【讓數據庫按我們的意思執行查詢計劃】》,本文關鍵詞  sqlserver,關于,分頁,存儲,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《sqlserver關于分頁存儲過程的優化【讓數據庫按我們的意思執行查詢計劃】》相關的同類信息!
  • 本頁收集關于sqlserver關于分頁存儲過程的優化【讓數據庫按我們的意思執行查詢計劃】的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 西盟| 金山区| 鹿邑县| 肇州县| 大安市| 扎囊县| 泰顺县| 绥芬河市| 邢台县| 三门县| 岳阳县| 永新县| 来凤县| 双桥区| 抚远县| 内黄县| 云南省| 加查县| 西平县| 吉安县| 锡林浩特市| 金乡县| 苏尼特右旗| 深水埗区| 休宁县| 台中县| 离岛区| 松江区| 唐海县| 宁南县| 碌曲县| 洛扎县| 乌审旗| 庄浪县| 古田县| 台南县| 南宫市| 柘荣县| 安福县| 连江县| 隆回县|