国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > 綜合 > 正文

分頁(yè)實(shí)現(xiàn)方法的性能比較

2024-07-21 02:32:17
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

我們先給出幾種主要的分頁(yè)方法和核心語(yǔ)句,然后直接給出結(jié)論,有興趣的讀者可以看看后面的數(shù)據(jù)

幾種常用存儲(chǔ)過(guò)程分頁(yè)方法

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 ...

臨時(shí)表

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新語(yǔ)法,類似臨時(shí)表,但是生命周期稍微不同,這里只是他的一個(gè)運(yùn)用

with cte_temp--定義零時(shí)表,PageIndex是一個(gè)計(jì)算字段,儲(chǔ)存了搜索結(jié)果的頁(yè)號(hào)

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

 

結(jié)論:

TopN在小頁(yè)數(shù)下最快,如果在10頁(yè)以下,可以考慮用它,CTE和臨時(shí)表時(shí)間很穩(wěn)定,CTE消耗的時(shí)間比臨時(shí)表多,但是不會(huì)引起tempdb的暴漲和IO增加

性能比較

試驗(yàn)環(huán)境:win2003server,Sqlserver2005,庫(kù)大小2,567,245行,沒(méi)有where子句,試驗(yàn)時(shí)每頁(yè)大小50,頁(yè)碼作為變量

取0,3,10,31,100,316,1000,3162...頁(yè),也就是10的指數(shù),試驗(yàn)結(jié)果如下

 

   頁(yè)數(shù)    TopN     CTE  臨時(shí)表(有緩存)

  臨時(shí)表(無(wú)緩存)

公司正在使用的存儲(chǔ)過(guò)程 CTE改進(jìn)
1312101014577302
31577955244647191
1012755048838014646116
32588967212236019767602
1004680973816642354867151
31645271976432338675227255
1000    Null980686925786358948
3162    Null982224854110124608210
10000    Null9754781211926142507359
31623    Null97751872933218152497511
100000    Null    Null3153855569171396124

數(shù)據(jù)解釋和分析

臨時(shí)表分為有沒(méi)有緩存兩種時(shí)間,CTE就是上面的方法,CTE改進(jìn)只是把選入CTE臨時(shí)表的列數(shù)減少了,只選取了頁(yè)號(hào)和主鍵,Null表示時(shí)間無(wú)法計(jì)算(時(shí)間太長(zhǎng)),數(shù)據(jù)單位是毫秒.

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

http://blog.csdn.net/yizhu2000/archive/2007/06/03/1636573.aspx


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 清苑县| 卓资县| 渝中区| 太谷县| 南平市| 昆山市| 图木舒克市| 桑植县| 汽车| 文水县| 吉安县| 临朐县| 利津县| 高唐县| 宝清县| 乌鲁木齐县| 汤阴县| 余干县| 北川| 子洲县| 临沭县| 南投县| 淮南市| 毕节市| 沁水县| 衡山县| 图木舒克市| 九江县| 湖北省| 钟祥市| 康平县| 南通市| 仪陇县| 婺源县| 巴楚县| 百色市| 通道| 游戏| 盘山县| 延安市| 千阳县|