问题
当单表数据达到千万级时,用like数据检索速度无法满足需求
解决办法
通过索引优化可以适当加快检索速度,但是还是比较慢,N-gram是MySQL5.7.6内置全文检索插件,对MyISAM和InnoDB引擎有效。
经过简单测试,检索速度还是比较理想的,因此推荐采用N-gram!
测试环境
CPU(i5)+Mysql5.7.18
测试存储引擎:Innodb、Myisam
N-gram设置
把分词大小设置为2。要记住,分词的SIZE越大,索引的体积就越大,所以要根据自身情况来设置合适的大小。
Innodb单表千万数据测试
生成1千万条数据
数据表结构:
为了加快数据插入速度,数据插入完成后添加name为FULLTEXT字段
存储过程:
生成数据:
Innodb存储引擎插入数据比较慢,需要等较长时间!
为了检索方便,更改数据:
添加name为FULLTEXT字段
测试步骤
「%关键词%」测试
测试结果
N-gram:0.02s
like:1.7s
「%关键词」测试
测试结果
N-gram:12.22s
like:4.69s
「关键词%」测试
测试结果
N-gram:0.07s
like:3.30s
「关键词」测试
测试结果
N-gram:12.51s
like:3.59s
Myisam单表千万数据测试
生成1千万条数据
和Innodb类似,略!
测试步骤
「%关键词%」测试
「关键词」测试
总结
N-gram优势:
1.在没有索引优化下,like检索明显很慢
2.N-gram全文检索可以快速检索出数据
推荐!
N-gram缺点:
因为采用分词来检索,会把分词相关的数据也检索出来,速度会变慢,搜索的结果也不是很准确
(完)