日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > Sqlserver > Sql Server 2005 row_number()分頁性能測試

Sql Server 2005 row_number()分頁性能測試

來源:程序員人生   發布時間:2013-12-13 05:18:12 閱讀次數:2800次
現在分頁方法大多集中在select top/not in/游標/row_number,而select top分頁(在這基礎上還有二分法)方法似乎更受大家歡迎,這篇文章并不打算去討論是否通用的問題,本著實用的原則,花了一些時間去測試row_number()分頁的性能,感覺并不像一部分人所說的那么雞肋,由于接觸軟件開發才十個月,方方面面的東西都要學,經驗實在有限,不足之處請原諒,測試如下:

平臺與環境:
CPU:AMD 1150 2G 單核
內存:1G(系統正常啟動后約占300M空間)
硬盤:SATA 160G 8M Cache
系統:windows 2003 ent+Sql Server 2005 sp2
數據:共500萬條
-------------------------------------------------------------------
測試數據:
create table test_table
(
id   int identity(1,1) primary key not null,
cid   int  not null,
userName  varchar(50) null,
userPwd   varchar(50) null,
createTime datetime null
)
---------------------------------------------------------------------
插入記錄(cid分別插入1,2,3,4,機器實在太慢,總共只插入500萬條):
declare @count int
set @count=1
while @count<=1000000
begin
insert into test_table(cid,userName,userPwd,createTime) values(2,'admin','admin888',getdate())
set @count=@count+1
end
-------------------------------------------------------------------------------------------------------
分頁測試代碼:
這里采用row_number的兩種分頁方式:分別用top和between過濾
/*row_number() 查詢方法一*/
declare @tdiff datetime
set @tdiff=getdate()
select top 20 * from(select row_number() over(order by createtime desc,id asc) as rownumber,* from test_table ) as tb where rownumber>120000
select datediff(ms,@tdiff,getdate()) as '耗時(毫秒)'

/*row_number() 查詢方法二*/
declare @tdiff datetime 
set @tdiff=getdate()
select * from(select row_number() over(order by createtime desc,id asc) as rownumber,* from test_table ) as tb where rownumber between 120000 and 120200
select datediff(ms,@tdiff,getdate()) as '耗時(毫秒)'
----------------------------------------------------------------------------------------------------------
測試方法及結果(取三次平均值):
第一次測試,每頁顯示20條(單位:毫秒):
索引1(聚集) id asc
索引2(非聚集) createtime desc
頁次       方法1      方法2
1                0              0
10              0              0
100            10            10
1000          65            70
1W            530           546
10W       4500           4700
20W       9.5秒         9.7秒
---------------------------------------
第二次測試,每頁顯示20條(單位:毫秒):
索引1(聚集) id asc
索引2(非聚集) createtime desc,包含性列:cid,userName,userPwd
頁次       方法1      方法2
1                0              0
10              0              0
100            0              0
1000          13            16
1W           240         250
10W         2240       2260
20W         4436       4481
-----------------------------------------------------------------------------------------------------------------------------------------
總結及個人觀點:
由于表內記錄具有一定規律性和查詢的不確定性,在實際操作中,查詢時間會比以上數據長,查詢結果僅做參考。
1.top過濾要稍優于between過濾
2.在分頁至10W即第200W第記錄時,查詢已經要2秒以上,個人機器原因,稍微好點的電腦查詢速度可能可以提高到1秒以內。
3.分頁查詢的效率更重要的是取決于根據程序對數據庫的優化,如索引的正確建立,分區等因素(還在學習和研究中...)
3.如果是海量級數據,其實轉變一下思路也未嘗不可,按用戶的瀏覽習慣幾乎不會翻到千頁以后,個人感覺只要前1000頁分頁效率能接受就可以,測試1千頁以后的效率有些多余,前臺完全只需要呈現前幾百頁即可(如博客園只展示前200頁(目前隨筆數 568234),淘寶只展示前100頁),按測試的row_number效率。完全可以勝任。

評價:

row_number分頁除了節省代碼外,沒什么優點可言,還不如select top方式,更不用說二分法等。

你就分析下row_number寫法就明白了。

select * from (
select *,row_number(order by ** desc) as yy from XXXX
)m where yy between 1 and 20 

先把整個表符合條件的數據都取出來放在一個臨時表中,建立行號,然后再select.試問速度能快么

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日韩欧美黄色 | 天堂电影在线 | 亚洲成人av电影 | 日韩一二三四 | 成人自拍视频 | aa成人| 欧美一级免费大片 | 国产精品99999 | 欧美日韩成人在线 | 九九热只有这里有精品 | 亚洲精品亚洲人成人网 | 欧美日日夜夜 | 亚洲国产小视频 | 美女搡bbb又爽又猛又黄www | 欧美日韩在线视频一区二区 | 天天操夜夜曰 | 日本免费高清一区二区 | 黄色成人在线网站 | 丁香婷婷综合激情五月色 | 91在线网址 | 欧美性妇 | 免费观看污污视频 | 日本一区二区在线播放 | 欧美91 | 免费在线观看91 | 国产亚洲女人久久久久毛片 | 亚洲精品久久久久久一区二区 | 国产精品久久久久久久久久久免费看 | 亚洲福利一区二区三区 | 黄网免费在线观看 | 国产小视频在线播放 | 久久精品首页 | 久久污 | 久久久综合精品 | 欧美巨猛xxxx猛交黑人97人 | 在线三区 | 久久亚洲电影 | 日本精品视频一区二区 | 一级黄色大片在线观看 | 国产精品久久久久久久久久久杏吧 | 亚洲精品永久免费 |