【原创】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 长度为134varchar
Remark :长度为8varchar
 
测试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以后,有索引插入速度还比无索引插入的快(这点我也想不明白)
posted @ 2008-02-27 09:30  jacktu  阅读(3469)  评论(2编辑  收藏  举报