【原创】MySql的Query和Insert性能测试
通过对典型的query和insert操作的测试,暂时能得出如下结论(可能会受mysql版本,机器配置的影响):
关于query:
1. 100w是个无索引查询性能的分水岭。
2. 数据量在30w – 200w的区间,在索引高效的情况下,数据库数据量的变化,基本对查询不会产生明显的影响(这也跟查询原理相符)
3. 高效的索引,对查询速度的提高可能是数倍,甚至数十倍的!(这个也在很多案例中得到了证实)
关于insert:
4. 无索引插入在200w附近会出现一个插入速度的分水岭,200w之后的插入耗时基本上会增加2-3倍!
5. 有索引插入,数据量从50w – 300w,插入速度基本上比较平稳,没有明显的跃变。
6. 有索引插入与无索引插入相比,数据量在200w以内的时候,基本上有索引插入耗时 = 无索引插入耗时*1.5,在200w以后,有索引插入速度还比无索引插入的快(这点我也想不明白)
详细测试报告如下:
测试环境:
内存(M):
total used free shared buffers cached
Mem: 2020 1970 49 0 31 1309
Mysql版本:
server version: 4.1.15
数据库处于空闲状态
数据库:db_test_0525
表:t_test1
表结构:
user_num | varchar(100) | | |
name | varchar(200) | YES | | NULL
remark | text | YES | | NULL
stat_date
Stat_date:随机生成的时间值
User_name: 平均长度为11位的varchar
Name: 长度为134的varchar
Remark :长度为8的varchar
测试sql语句:
1. select * from t_test1 where user_num='139561885564' and stat_date >= date_format('2007-05-06','%Y-%m-%d');
2. select * from t_test1 where user_num='139561885564'
索引:alter table t_test1 add index idx_num_date(user_num,stat_date)
alter table t_test1 drop index idx_num_date
一.测试查询性能:
试验结果:(详细数据见附件)
试验数据:
数据量
|
30
|
50
|
100
|
150
|
200
|
查询耗时
|
0.53
|
0.87
|
1.75
|
7.31
|
9.79
|
趋势图:
通过曲线不难分析,100w左右是个查询性能的分水岭。
一.测试插入性能:
数据基数:50w
插入数据量:250w
插入方式:每次插入1000条记录,每插入1w条记录一次日志
采样规则:每插入1w记录一次当前数据量和插入这1w记录耗时(耗时单位:毫秒)
由于采样数据较多,详细数据见附件
1.无索引插入:
共采样了三组数据。第一组可能由于当时数据库繁忙,在插入到180w附近造成一定瑕疵
测试数据一:
测试数据二:
测试数据三:
2.有索引插入:
新建索引:alter table t_test1 add index idx_num_date(user_num,stat_date)
测试数据一:
测试数据二:
通过上图对比,不难总结2点:
1. 无索引插入在200w附近会出现一个插入速度的分水岭,200w之后的插入耗时基本上会增加2-3倍!
2. 有索引插入,数据量从50w – 300w,插入速度基本上比较平稳,没有明显的跃变。
3. 有索引插入与无索引插入相比,数据量在200w以内的时候,基本上 有索引插入耗时 = 无索引插入耗时*1.5,在200w以后,有索引插入速度还比无索引插入的快(这点我也想不明白)