模糊查询的优化

场景

单表数据量在几十万条的时候,发现对一个中文字段进行模糊查询的时,巨慢,几乎达到了几十秒。

解决

Mysql5.7是有中文的全文索引检索功能。

CREATE FULLTEXT INDEX 索引名 ON 表名 (字段名)  WITH PARSER NGRAM; 

具体的模糊查询SQL语句

MATCH(字段名) AGAINST ( CONCAT('+', 传入模糊查询参数, '*') IN BOOLEAN MODE); 

全文索引 Text index

  • 定义:全文索引就是通过将文字按照某种语言进行词汇拆分,重新将数据组合存储,来达到快速检索的目的
  • 场合:当字段里存储的都是文本时适合用全文索引,常用于搜索文字
  • 优点:全文索引不是按照键值存储的,而是按照分词重组数据,常用于模糊查询Where name like '%leonarding%'效率比全表扫描高很多,适用OLAP系统,OLTP系统里面用到的并不多。
  • 缺点:全文索引会占用大量空间有时比原表本身占的空间还多,bug较多,维护困难。

参考博客
MySQL 5.7 中文全文检索使用教程

MySQL ngram全文解析器

你可能感兴趣的:(数据库)