本篇主要介绍项目背景,项目需求 --- 与ES孽缘的源头。
一、项目背景
项目用于处理风控规则引擎处理的进件信息,对进件信息进行决策,用以对风险高的贷款进件进行标记。
项目特点:
1.数据库采用mysql (5.7.21)。
2.项目进件主表数据量在500W左右,进件关联的联系人表数据量在3000W左右。
3.项目中用户需求指定列表查询条件为模糊查询,且数据涉及主表与联系人表数据。
总结:数据量大,模糊查询。
二、制定方案
由于模糊查询在mysql中,头和尾都含有“%”的查询,即类似selece name from table where name like “%呵呵%” ;
这样的查询语句不命中索引,因此涉及到模糊查询的时候会进行全表扫描。在3000W数据量的条件下,全表扫描效率可想而知(我没查出来就),因此考虑实施以下方案:
方案1
建立mysql全文索引:库表采用innodb引擎(MySQL5.6以上支持),在一个搜索条件列上建立全文索引(fulltext),测试发现如下:
结果分析:mysql全文索引默认是以英文语句进行生成索引,英文语句存在空格,因此每个词可以分开,而中文都是连着的,mysql分不开。因此如果想使用mysql的全文索引来索引中文单词的话只能手动用空格进行分开,过于繁琐,不推荐。
方案2
采用搜索引擎。
下一篇将介绍为何选用搜索引擎,搜索引擎与传统数据库相比有什么区别?