SQL模糊匹配like %%优化方式--全文索引

370 阅读1分钟

全文索引

MySQL 5.6开始支持全文索引,可以在变长的字符串类型上创建全文索引,来加速模糊匹配业务场景的DML操作。它是一个inverted index(反向索引),创建 fulltext index 时会自动创建6个 auxiliary index tables(辅助索引表),同时支持索引并行创建,并行度可以通过参数 innodb_ft_sort_pll_degree 设置,对于大表可以适当增加该参数值。

删除全文索引的表的数据时,会导致辅助索引表大量delete操作,InnoDB内部采用标记删除,将已删除的DOC_ID都记录特殊的FTS_*_DELETED表中,但索引的大小不会减少,需要通过设置参数innodb_optimize_fulltext_only=ON 后,然后运行OPTIMIZE TABLE来重建全文索引。

全文索引特征

两种检索模式:

IN NATURAL LANGUAGE MODE:默认模式,以自然语言的方式搜索,AGAINST(‘科技’ IN NATURAL LANGUAGE MODE ) 等价于AGAINST(‘科技’)。 IN BOOLEAN MODE:布尔模式,表是字符串前后的字符有特殊含义,如查找包含SK,但不包含Lyn的记录,可以用+,-符号。 AGAINST(‘+SK -Lyn’ in BOOLEAN MODE);

image.png

IN NATURAL LANGUAGE MODE:默认模式,以自然语言的方式搜索,AGAINST(‘科技’ IN NATURAL LANGUAGE MODE ) 等价于AGAINST(‘科技’)。

IN BOOLEAN MODE:布尔模式,表是字符串前后的字符有特殊含义,如查找包含SK,但不包含Lyn的记录,可以用+,-符号。

AGAINST(‘+SK -Lyn’ in BOOLEAN MODE);

对表users01的nickname添加支持中文分词的全文索引

mysql>alter table users01 add fulltext index idx_full_nickname(nickname) with parser ngram;

参考:blog.csdn.net/weixin_4598…