MySQL全文索引抛出[Err] 188 - FTS query exceeds result cache limit

MySQL全文索引,抛出[Err] 188 - FTS query exceeds result cache limit错误记忆。

数据库表存储引擎:InnoDB

表容量:300W+行

这个错误主要与 innodb_ft_result_cache_limit配置有关,

mysql约定最大值2^32-1,默认值2000000000(不同版本存在差异)

可通过sql查询当前配置:

show global variables like 'innodb_ft%';

错误原因:

由于使用BOOLEAN模式的关键字索引查询,关键字出现词频很较高,内部匹配结果时超过了配置缓存数量限制。

极端情况,若使用者刻意用一个出现很高频率的关键字查询,抛出该异常的几率更高。

解决思路:

1、通过适当调整innodb_ft_result_cache_limit配置。

    此方法虽然简单,但是会面临随着业务数据的增长,总会有超出限制的一天。另外增加配置的值要求服务器能提供充足的内存资源。还会遇到极端情况。

2、为了避免该问题,可设计一些不符合查询关键字(词)的过滤器,将一些非关键但出现频率高词组从查询条件中移除。(毕竟全文索引也是搜索主要关键字(词))

    例如我们可以使用 jieba的分词处理,提取关键字(当然也有其他),吧过滤的关键子删除掉。

3、MySQL的InnoDB的全文索引提供完善的配置和过滤,可以通过配置设置不需要全文索引的关键词排除在索引之外。实现的思路与2相似。不同的是此方法从MySQL全文索引根源出发。

    具体方法在探索中!

暂时记录到这,如有错误欢迎指正。

你可能感兴趣的:(MySQL全文索引抛出[Err] 188 - FTS query exceeds result cache limit)