众所周知,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)在千、万、十万级索引有效,但百万级差别比较小

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐