搭建自己的裤子过程,发现搜索某2000w的裤子数据,使用 等于 搜索也非常的慢,于是计划测试一下 MySQL 在多少量级下的数据性能最好。下面测试是非专业认识的非专业测试,仅作为非专业人士搭建过程参考。

测试环境

机箱 蜗牛星际D款
CPU j1900 2GHz 4核
内存 4G ddr3l 1.35v电压 1600hz
硬盘 120g mstata 固态硬盘
MySQL为默认配置

测试过程

测试数据

测试的数据从2000w的裤子数据抽取,测试以100w量级递增,主要测试的引擎为innodb、myisam两种,索引是 INDEX, FULLTEXT两种。

测试示例代码

创建的表如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
sql = ''' CREATE TABLE IF NOT EXISTS %s(
Name varchar(50),
CardNo varchar(30),
Descriot varchar(300),
CtfTp varchar(30),
CtfId varchar(50),
Gender varchar(4),
Birthday varchar(30),
Address varchar(100),
Zip varchar(30),
Dirty varchar(30),
District1 varchar(30),
District2 varchar(30),
District3 varchar(30),
District4 varchar(30),
District5 varchar(30),
District6 varchar(30),
FirstNm varchar(100),
LastNm varchar(100),
Duty varchar(30),
Mobile varchar(100),
Tel varchar(80),
Fax varchar(80),
EMail varchar(100),
Nation varchar(30),
Taste varchar(300),
Education varchar(30),
Company varchar(50),
CTel varchar(100),
CAddress varchar(50),
CZip varchar(30),
Family varchar(30),
Version varchar(30),
huazhu_id varchar(30)
)ENGINE=MyISAM DEFAULT CHARSET=utf8'''

测试mysql语句列表如下

1
2
3
4
5
6
7
8
9
10
11
12
# 普通查询
normal_name_sql = 'select id from %s WHERE NAME = "测试"'
normal_mail_sql = 'select id from %s WHERE EMail = "liwei@163.com"'
normal_id_sql = 'select * from %s WHERE id = %s'
# 用户名模糊查询
leftblur_name_sql = 'select id from %s WHERE NAME LIKE "%%测"'
rightblur_name_sql = 'select id from %s WHERE NAME LIKE "李%%"'
allblur_name_sql = 'select id from %s WHERE NAME LIKE "%%测%%"'
# 邮箱模糊查询
leftblur_mail_sql = 'select id from %s WHERE EMail LIKE "%%@163.com"'
rightblur_mail_sql = 'select id from %s WHERE EMail LIKE "liwei%%"'
allblur_mail_sql = 'select id from %s WHERE EMail LIKE "%%@163.com%%"'

结果分析

插入耗时

在测试数据量级范围内,同数量级下 myisam 的耗时比 innodb 少,且斜率也比后者平缓。
insert_time

索引耗时

900w以下的数量级,innodb 效率比 myisam 略好,但 myisam 创建耗时基本随数量级等比增长,innodb 在小于500w数量级时,斜率较缓,超过这个数量级,耗时有明显增加的趋势。
create index time

create fulltext time

搜索耗时

横向对比

在未创建索引表进行搜索,用户名搜索和邮箱搜索耗时,innodb 引擎效率明显比 myisam 好。同引擎下,且用户名和邮箱搜索耗时基本差不多。
未创建索引-搜索用户名耗时

未创建索引-搜索邮箱耗时

但是通过ID搜索耗时却很迷,搜索耗时就没有规律可循了。

同理,在创建了 INDEX 、FULLTEXT 索引的表也有类似的规律,这里就不赘诉了,可以详见附件的测试结果表单。

纵向对比

搜索效率上看,创建了索引的比没创建索引,在右模糊查询耗时明显小很多,但左模糊查询和全模糊查询上相差并不是很大。
未创建索引右模糊查询

创建了INDEX索引,右模糊查询

FULLTEXT 右模糊查询

总结

经以上测试,该配置下的MySQL,性能太辣鸡了。[狗头]

附件

测试结果表单