测试环境:
本机Mysql,版本5.7.9, win10,中等配置笔记本电脑
阿里云porlarDb, 2核4G入门配置
测试表:
在本机和阿里云数据库中,都创建4个表,
test_fulltext_03、test_fulltext_04、test_fulltext_05、test_fulltext_06
表结构相同,都是id,province、name、content 4个varchar字段
测试数据准备
用java先生成300万行和500万行的两个文本文件,内容格式如下:
再使用 LOAD DATA命令导入表里(速度极快,300万行仅需1分钟),比如:
LOAD DATA LOCAL INFILE "d:/temp/data3.txt" INTO TABLE test_fulltext_03 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
表03和04都导入data3.txt, 300万行,
表05和06都导入data5.txt, 500万行
对表04和06的name和content字段加上全文检索索引:
CREATE fulltext INDEX index_name ON test_fulltext_04(name, content);
CREATE fulltext INDEX index_name ON test_fulltext_06(name, content);
添加后的状态
================ 本机Mysql 300万行 性能测试 =====================
3.1:表03,直接用 like %%模糊匹配,检索前1000行
速度惊人,0.016秒
3.2:表03,直接用 like %%模糊匹配,检索第2000 - 3000行
0.234秒,可以看到时间明显增加
3.3:表03,直接用 like %%模糊匹配,检索第8000 - 9000行,2万- 2万1千行
可以看到耗时迅速变多
3.4:表03,直接用 like %%模糊匹配,检索条件匹配不到数据的情况
耗时4秒,可见like查询,时间和目标数据在什么位置有关
3.5:表03,直接用 like %%模糊匹配,统计目标记录数量
耗时也是4秒,可见统计数量很慢
3.6:表03,直接用 like %%模糊匹配,统计目标记录数量,条件找不到的情况
耗时3.8秒,还是慢
4.1:表04,使用全文索引进行匹配,检索前1000行
令人惊奇,0.59秒,比直接like的要慢的多
4.2:表04,使用全文索引进行匹配,检索前2000-3000行,8000-9000行,20000-21000行
时间也在增加,但是增幅较小,比较稳定。之前表03匹配2万-2万1千行,要2.3秒
4.2:表04,使用全文索引进行匹配,统计数量
这个耗时达到12秒,无法忍受的程度
4.3:表04,使用全文索引进行匹配,统计数量,匹配不到的情况
更慢的效果。。。
================ 阿里云PolarDb 300万行 性能测试 =====================
阿里3.1:表03,直接用 like %%模糊匹配,检索前1000行
0.09秒,基本是网络传输耗时
阿里3.2:表03,直接用 like %%模糊匹配,检索第2000 - 3000行、8000-9000行,20000-21000行
时间增加的情况与本机mysql类似,性能基本持平
阿里3.3:表03,直接用 like %%模糊匹配,检索条件匹配不到数据的情况
耗时3秒,比本机快1秒
阿里3.4:表03,直接用 like %%模糊匹配,统计目标记录数量
耗时1.3秒,比本机的4秒快很多
阿里3.5:表03,直接用 like %%模糊匹配,统计目标记录数量,条件找不到的情况
耗时1.1秒,比本机的4秒快很多
阿里4.1:表04,使用全文索引进行匹配,检索1000行,处于不同位置的数据
速度和本机全文检索基本一致
阿里4.2:表04,使用全文索引进行匹配,统计数量
6秒7,虽然慢,但是比本机全文检索快很多(12秒)
阿里4.3:表04,使用全文索引进行匹配,统计数量,匹配不到的情况
3秒,比本机全文检索快很多(13秒)
================== 300万行测试的基本结论 ===========================
1:直接like查询,数据靠前时,速度很快,越靠后越慢
2:全文检索时,数据靠后带来的效率影响较小,性能更稳定
3:count数量比查询数据要慢的多, 本机mysql 全文检索的count更慢
4:阿里polarDb的like查询,性能和本机基本一致, 阿里like查询的统计数量,比本机要快的多
5:阿里polarDb的全文检索查询,性能和本机基本一致,统计数量比本机快得多
500万行数据的测试,方法和以上一致,只贴数据
5.1 本机,like查询
5.2本机,全文检索
5.1阿里,like查询
可以注意到,count(*)的效率远超本机
5.2阿里,全文检索