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,此外还有一些通配符,需要的可以百度看一下。
另外,这个对中文的支持不好,据说新版的自带了中文分词插件,不带分词插件情况下,只能全词才能匹配到,模糊的匹配不到。