Mysql 使用全文索引

时间:2022-09-22 11:25:14

Mysql数据量达到百万级别以后,查询性能很低,尤其是在模糊查询方面,采用like %xxx%形式,速度难以接受,200万数据,查询需要大约10秒,当然根据like的内容,如果采用limit形式,不使用order by,关键词出现频率高的查询效率会好一些,但是较为低的查询效率很是问题。


MySQL5.6之前 fulltext索引只支持MyISAM的表类型,5.6开始在InnoDB类型中开始支持。


建立全文索引需要注意,默认索引词最小单位是4,一般都需要稍微修改一下,show variables like 'ft_min_word_len'; 查看默认

linux 修改/etc/my.cnf中配置,将ft_min_word_len=1加到mysqld下保存,并重启服务器。

表上建立全文索引,多个字段逗号隔开,全文索引查询时也要多个字段

alter table xxx add fulltext(nickname);

SELECT
c.id,
c.nickname

FROM
xxxx c
where match(c.nickname) against ('框渣' in boolean mode)
limit 10;
如果查询不到数据执行:

repair table xxxx;

索引重新建立一下。

再次执行应该就可以查询到数据了,查询采用match(col1,col2..) against ('关键词1,xxxx,xxx,'),该形式是返回浮点类型代表匹配度,使用in boolean mode时布尔类型,只返回0/1,此外还有一些通配符,需要的可以百度看一下。

另外,这个对中文的支持不好,据说新版的自带了中文分词插件,不带分词插件情况下,只能全词才能匹配到,模糊的匹配不到。