測試環境
作業系統: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、