日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(转)几种常用存储过程分页方法

發布時間:2023/12/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (转)几种常用存储过程分页方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們先給出幾種主要的分頁方法和核心語句,然后直接給出結論,有興趣的讀者可以看看后面的數據

幾種常用存儲過程分頁方法

TopN方法

select Top(@PageSize) from TableName where ID Not IN??

(Select Top ((@PageIndex-1)*@PageSize)??ID from Table Name where .... order by ... )

where .... order by ...

臨時表

declare @indextable table(id int identity(1,1),nid int,PostUserName nvarchar(50))

declare @PageLowerBound int

declare @PageUpperBound int

set @PageLowerBound=(@pageindex-1)*@pagesize--下限

set @PageUpperBound=@PageLowerBound+@pagesize--上限

set rowcount @PageUpperBound

insert into @indextable(nid,PostUserName) select ReplyID,PostUserName from? TableName order by ......

select *? from? TableName p,@indextable t where p.ID=t.nid

and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id

CTE--2005新語法,類似臨時表,但是生命周期稍微不同,這里只是他的一個運用

with?cte_temp--定義零時表,PageIndex是一個計算字段,儲存了搜索結果的頁號

?As (ceiling((Row_Number() over(order by?.... )-1)/@pagesize as int) as PageIndex,* from TableName where.....)
select *? from?cte_temp where pageindex=@pageindex-1;

結論:

TopN在小頁數下最快,如果在10頁以下,可以考慮用它,CTE和臨時表時間很穩定,CTE消耗的時間比臨時表多,但是不會引起tempdb的暴漲和IO增加

性能比較

試驗環境:win2003server,Sqlserver2005,庫大小2,567,245行,沒有where子句,試驗時每頁大小50,頁碼作為變量

取0,3,10,31,100,316,1000,3162...頁,也就是10的指數,試驗結果如下

頁數TopNCTE臨時表臨時表老論壇存儲過程CTE改進
1312101014577302
31577955244647191
1012755048838014646116
32588967212236019767602
1004680973816642354867151
31645271976432338675227255
1000無法計算980686925786358948
3162無法計算982224854110124608210
10000無法計算9754781211926142507359
31623無法計算97751872933218152497511
100000無法計算無法計算3153855569171396124

?

數據解釋和分析

臨時表分為有沒有緩存兩種時間,CTE就是上面的方法,CTE改進只是把選入CTE臨時表的列數減少了,只選取了頁號和主鍵,Null表示時間無法計算(時間太長),數據單位是毫秒.

從上面的數據可以看到,TopN在前32頁都是有優勢的,但是頁數增大后,性能降低很快,CTE改進比CTE有所進步,平均進步兩秒左右,但是還是比臨時表慢,但是考慮臨時表會增大日志文件的大小,引起大量IO,CTE也就有他自己的優勢,公司現在正在使用的存儲過程效率不錯,但是在頁碼靠后的情況下性能會降低

轉載于:https://www.cnblogs.com/hongyuniu/archive/2008/05/23/1205833.html

總結

以上是生活随笔為你收集整理的(转)几种常用存储过程分页方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。