MySql, 阿里云porlarDb的模糊检索、全文检索效率测试

测试环境:

本机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阿里,全文检索

全文检索的 count(*),效率也远超本机
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容