多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

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

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

來源:程序員人生   發布時間:2013-12-13 05:18:12 閱讀次數:2794次
現在分頁方法大多集中在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.試問速度能快么

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美黑人ⅹxxx另类猛交 | 欧美一级视频免费看 | 久草综合在线 | 精品高清国产a毛片 | 色综合天天综合网国产成人网 | 国产精品国产三级在线高清观看 | 特级淫片国产免费高清视频 | 久久精品欧美一区二区 | 秋霞毛片| 国内精品一区二区三区αv 国内精品一区二区三区东京 | 麻豆久久精品免费看国产 | 亚洲欧洲日产国码二区首页 | 欧美一区二区三区在线播放 | 一级欧美视频 | 久久se精品一区二区国产 | 欧洲精品码一区二区三区免费看 | 亚洲综合色自拍一区 | 亚洲精品国产高清嫩草影院 | 一区二区三区在线观看视频 | 国产成人精品日本亚洲语言 | 激情区小说区偷拍区图片区 | 国产午夜亚洲精品久久999 | 一区二区三区四区 | 麻豆影| 69国产精品视频免费 | 国产精品一区二区免费 | 日本午夜在线观看 | 国产精品亚洲精品不卡 | 久久久精品久久久久三级 | 中文字幕曰产乱码 | 欧美成人性色大片在线观看 | 伊人看片| 欧美日韩一区二区三区麻豆 | 亚洲欧美片 | 在线精品日韩一区二区三区 | 欧美性video 欧美性videosex18 | 国产a自拍 | 日本天堂在线 | 国产在线永久视频 | 亚洲精品成人中文网 | 日韩精品一区二区三区中文字幕 |