測試環境
操作系統:windows server 2003
CPU:Intel(R) Xeon(TM) CPU 3.00GHz,4核
內存:2G,主要運行MySQL服務
硬盤:cciss 37G
文件系統:NTFS,支持大文件
數據庫版本:SQL Server 2000 sp3
網卡:100M
網絡環境:100M交換局域網
測試方法
數據規模分爲1萬條、10萬條、100萬條和1000萬條記錄級別。
在每種數據規模下分別執行2000次隨機查詢,這樣可以防止數據庫直接從緩存中返回查詢結果,更加接近真實的查詢情況。以系統時間爲隨機種子,在現有的記錄範圍內隨機執行查詢操作。
查詢類型分爲:單表select、雙表select、insert、update、delete。
每個執行條目都爲單次查詢的平均執行時間,單位爲微妙。如果要看整體執行時間,則乘以2000即可。
由於腳本插入數據很慢,採用sql server客戶端工具測試效率很低且不能保證足夠的隨機性,所以插入數據和測試性能都是自己編寫相應的程序來完成。
開啓二進制更新日誌。
測試記錄
測試數據
本地查詢操作平均執行時間(單位:微秒)
項目記錄數 | 單表select | 雙表select | insert | update | delete |
1萬條 | 295 | 2249 | 16292 | 2552 | 2681 |
10萬條 | 302 | 134658 | 16406 | 2689 | 2790 |
100萬條 | 524746 | 691188 | 16832 | 546313 | 501983 |
1000萬條 | 49000000 | 103000000 | 16882 | 49100000 | 49100000 |
跨主機查詢操作平均執行時間(單位:微秒)
項目記錄數 | 單表select | 雙表select | insert | update | delete |
1萬條 | 986 | 3143 | 16431 | 3608 | 3497 |
10萬條 | 1076 | 125462 | 17248 | 4087 | 3825 |
100萬條 | 525524 | 709991 | 17514 | 552526 | 526370 |
1000萬條 | 49002000 | 103003000 | 18882 | 49102000 | 49104000 |
到了千萬條記錄的規模,sql server查詢及其緩慢,內存佔用高達1.7G。
查詢過於緩慢,導致測試效率極低,無法進行2000次隨機查詢,只能查詢3次求平均值。
性能比較
由於百萬和千萬條的查詢時間與1萬和10萬條懸殊過大,圖例很難正常顯示。
這裏就只提供表格數據,以供比較參考。
SQL Server本地查詢操作平均執行時間(單位:微秒)
項目記錄數 | 單表select | 雙表select | insert | update | delete |
1萬條 | 295 | 2249 | 16292 | 2552 | 2681 |
10萬條 | 302 | 134658 | 16406 | 2689 | 2790 |
100萬條 | 524746 | 691188 | 16832 | 546313 | 501983 |
1000萬條 | 49000000 | 103000000 | 16882 | 49100000 | 49100000 |
MySQL MyISAM引擎本地查詢操作平均執行時間(單位:微秒)
項目記錄數 | 單表select | 雙表select | insert | update | delete |
1萬條 | 178 | 247 | 694 | 141 | 170 |
10萬條 | 195 | 271 | 705 | 157 | 186 |
100萬條 | 3055 | 5164 | 746 | 4308 | 12373 |
1000萬條 | 8665 | 15259 | 803 | 11033 | 17224 |
SQL Server跨主機查詢操作平均執行時間(單位:微秒)
項目記錄數 | 單表select | 雙表select | insert | update | delete |
1萬條 | 986 | 3143 | 16431 | 3608 | 3497 |
10萬條 | 1076 | 125462 | 17248 | 4087 | 3825 |
100萬條 | 525524 | 709991 | 17514 | 552526 | 526370 |
1000萬條 | 49002000 | 103003000 | 18882 | 49102000 | 49104000 |
MySQL MyISAM引擎跨主機查詢操作平均執行時間(單位:微秒)
項目記錄數 | 單表select | 雙表select | insert | update | delete |
1萬條 | 358 | 484 | 1188 | 269 | 298 |
10萬條 | 375 | 505 | 1227 | 283 | 322 |
100萬條 | 3174 | 5293 | 1242 | 4142 | 7981 |
1000萬條 | 12302 | 19920 | 1261 | 12355 | 20449 |
性能分析
1、 從圖表看出,在普通PC服務器上,sql server在執行大規模100萬條記錄以上的查詢效率就很低,到了1000萬條規模業務幾乎無法開展,單條查詢都40多秒。
2、SQL Server插入數據性能受數據規模影響較小,這點與MySQL類似。
主要原因是,插入數據都是從尾部插入的,跟前面的數據規模關係更不大。
3、數據規模越大,MySQL和SQL Server性能差別就越大。
4、MySQL的性能隨着數據規模增大線性遞減,而SQL Server幾乎是指數遞減。
5、由於在MySQL 5.0以後MyISAM引擎和InnoDB引擎的性能差別不大,所以就選擇了MyISAM引擎來和SQL Server來比較。
6、在低配置服務器和PC機上運行數據庫,建議採用Linux加MySQL。
7、