mariadb在有无索引下插入和查询速度对比
众所周知,mariadb是mysql的一个分支,使用起来和mysql差别不大。我最近看了看《高性能MySQL》,虽然明白了一些索引的原理,但对于索引实际能提升的效率还是缺乏直观的认识,所以想要测试一下索引对插入和查询的时间的影响。之所以使用mariadb而不是mysql,一是因为两者相差不大,二是yum库中没有mysql。测试环境:虚拟机系统:centos,cpu:1核,内存:2g,mar...
众所周知,mariadb是mysql的一个分支,使用起来和mysql差别不大。我最近看了看《高性能MySQL》,虽然明白了一些索引的原理,但对于索引实际能提升的效率还是缺乏直观的认识,所以想要测试一下索引对插入和查询的时间的影响。之所以使用mariadb而不是mysql,一是因为两者相差不大,二是yum库中没有mysql。
测试环境:
虚拟机系统:centos,cpu:1核,内存:2g,mariadb版本:
数据采集方式:
1.插入随机数据到某个量级
2.执行查询语句,相同语句执行100次,获取执行100次所需时间
3.然后插入100条数据,获取所用时间
一共测试千,万,十万,百万这四个量级
表情况:
innob引擎
表结构 | no | name | male | age | address |
| 序号(自增) | varchar(20) | 'f','m' | int |
|
数据随机策略:
no:自增
name: 5-9个a-z字母
male:随机
age:0-100随机
address:20个城市+随机字符串(0-10,a-z)
表1:无索引表
表2:有索引表 索引1(name),索引2(年龄,address)
表3:单索引表 索引1 hash(name),索引2(年龄),索引3(address),索引4(male)
查询语句:
1.select * from $table where name= 中间值
2.select * from $table where name like 中间值前三个字母
3.select name from $table where name like 中间值前三个字母
4.select name from $table where name like 中间值前三个字母 order by name
5.select * from $table where age = 51 limit 100
6.select * from $table where age > 47 and age < 52 limit 100
7.select * from $table where age > 47 and age < 52 and address like 'beijing%' limit 100
8.select * from $table where age > 47 and age < 52 and address=中间值 limit 100
9.select * from $table where address like 'beijing%' and age > 47 and age < 52 limit 100
10.select * from $table where age =52 and address like 'beijing%' limit 100
11.select * from $table where address like 'beijing%' limit 100
12.select * from $table where male = 'f' and age > 47 and age < 52 limit 100
中间值:当前量级插入量级一半的时候的数据,例如1万量级时,第5000条数据的值
结果:
内容太多,只挑一些说明。如果感兴趣,详细结果访问https://github.com/pyromancer-shadow/Mysqltest,代码也在这里
1.插入效率看不出多少差别,我本以为会差很多,而且大家都说索引会降低插入速度。
不过在十万和百万级的时候有有数据异常,不明白为什么,只知道与索引无关。因为十万级无索引的反而很慢。
2.查询速度在1千级已经有差距了,没有索引的比用了索引的时间长3倍
在百万级选择性比较高的索引和查询(比如说查询1)相差近千倍,查询2、3、4差百倍。
选择性较小的(查询4、5)在千、万、十万级索引有效,但百万级差别比较小
更多推荐
所有评论(0)