Sql Server 2005 row_number()分頁效能測試
現在分頁方法大多集中在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效率。完全可以勝任。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-623881/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server 2005效能調整二(zt)SQLServer
- SQL Server 2005效能調整一(zt)SQLServer
- sql server 2005資料庫快照SQLServer資料庫
- 已安裝 SQL Server 2005 Express 工具。若要繼續,請刪除 SQL Server 2005 Express 工具SQLServerExpress
- MySql/Oracle和SQL Server的分頁查MySqlOracleServer
- Prepared SQL 效能測試SQL
- SQL Server中row_number函式的常見用法SQLServer函式
- SQL Server Availability Group Failover 測試SQLServerAI
- OceanBase金融SQL、億萬級別據量最佳化案例(Row_number 開窗 + 分頁SQL)SQL
- [翻譯]SQL Server 2005 Analysis Services效能指南 Part 1 - 理解查詢構架SQLServer
- sql server 2005 資料修改的內部原理SQLServer
- Python的SQL效能測試PythonSQL
- Python 的 SQL 效能測試PythonSQL
- SQL Server2005使用CTE實現遞迴QCSQLServer遞迴
- SQL Server 2005詳細安裝過程及配置SQLServer
- 如何建立和還原SQL Server 2005資料庫?SQLServer資料庫
- SQL Server 2005的複製儲存過程選項BYSQLServer儲存過程
- 使用profiler測試Oracle PL/SQL效能OracleSQL
- Q&A:在SQL Server 2005中編寫儲存過程RVSQLServer儲存過程
- 效能測試學習(1)-效能測試分類與常見術語
- mybatis-plus連線SQL Server2012分頁查詢異常MyBatisSQLServer
- 基於Sql server資料庫的四種分頁方式總結SQLServer資料庫
- sql中row_number over語句SQL
- [20210812]測試sql語句子游標的效能.txtSQL
- SQL Server 2000/2005/2008刪除或壓縮資料庫日誌的方法SQLServer資料庫
- SQL Server 資料頁損壞修復SQLServer
- 如何改善SQL Server + SharePoint組合效能BGSQLServer
- YLazy Web Page Test , 網頁效能測試平臺Web網頁
- 如何將SQL Server 2000備份的資料庫檔案還原(升級)為SQL Server 2005或更高版本的資料庫?SQLServer資料庫
- Microsoft SQL Server 2005中查詢優化器使用的統計資訊一(zt)ROSSQLServer優化
- Microsoft SQL Server 2005中查詢優化器使用的統計資訊三(zt)ROSSQLServer優化
- 因為修改windows管理員密碼導致sql server 2005不能啟動處理Windows密碼SQLServer
- Microsoft SQL Server 2005中查詢優化器使用的統計資訊二(zt)ROSSQLServer優化
- SQL Server中的IO效能殺手Forwarded recordSQLServerForward
- 效能測試
- 千萬級資料深分頁查詢SQL效能最佳化實踐SQL
- SQL 分頁儲存過程SQL儲存過程
- mybatis動態sql與分頁MyBatisSQL
- Jmeter介面測試+效能測試JMeter