测试环境
操作系统: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、