mysql优化-全文索引

全文索引创建


1. alter table [table_name] add FULLTEXT [index_name] (column);

全文索引模式


1. 自然语言模式

select unique_code, title from tb_name where match(unique_code) against ('album page');

其中unique_code 上有全文索引

mysql将搜索词语 “album page” 分成两个独立的关键词进行搜索。然后根据搜索结果与搜索词的相关性来排序。(在s使用全文索引进行排序的时候,无法再使用索引排序,所以不想使用文件排序的话,在全文索引的查询中就不要使用order by)。

2. boolean  全文索引

boolean 搜索通过停用词列表过滤掉噪声词,除此之外还要求搜索关键词必须大于 “ft_min_word_len" 小于“ft_max_word_len"。 其搜索返回的结果是未经排序的

“+mysql”:  必须包含"mysql"

“-mysql”:不可以包含“mysql”

“~mysql”:包含mysql的rank值更低

“mysql”:包含mysql的rank值更高

“mysql*”:包含以mysql开头的单词的行rank更高

“""”: 短语搜索,要求精确匹配质指定的短语

boolean  索引使用

select unique_code, title from tb_name where match(unique_code) against ('+album +page');

mysql全文索引没有查询结果


    a. 在自然搜索时,如果搜索的词在超过50%的记录里面都出现了,那么自然语言搜索将不会搜索这类词。

    b. mysql 全文索引是按照单词来匹配的。假设文本是“explore_page",  用“explore”是不能匹配出结果的,因为mysql认为explore_page是一个单词。但是如果在boolean模式下,match(unique_code) against ('explore*' in boolean mode) 是可以匹配到结果的。

全文索引优化策略


1. 全文索引比普通索引有更多的碎片问题,所以要经常使用 OPTIMIZE TABLE 来减少碎片。 

2.  保证索引缓存足够大,从而保证所有的全文索引都能够缓存在内存中。可以为全文索引设置单独的键缓存,保证不会被其他索引缓存挤出内存。

2. 提供一个停词表:尤其是对某些专业的文档,某一些关键词会大量出现。

3. 忽略一些太短的词可以提升全文索引的效率;索引词的最小长度可以通过  “ft_min_word_len" 来配置。

注意:当调整允许最小词长后,需要通过OPTIMIZE TABLE 来重建索引才会生效。

4. 当向全文索引表中导入大量数据时,最好先 “DISABLE KEYS” 来禁用全文索引,然后在导入结束后使用 “ENABLE KEYS” 来建立全文索引。

Notes:停用词表,最小词长都可以通过减少索引词语来提升全文索引的效率,但是同时也降低了搜索的精确度。

5. 如果数据集特别大,需要对数据进行手动分区,最好通过外部的搜索引擎来实现,如:Lucence或者Sphinx。

全文索引的限制


1. 全文索引只有全部在内存中的时候,性能才会非常好。如果内存无法装载全部索引,那么搜索速度会非常的慢。

2. 全文索引会影响查询优化器的工作。如果查询中使用来match against,而对应的列上有可用的全文索引,那么mysql就一定会使用这个全文索引,而忽视掉性能更好的其他索引。

3. 全文索引不可能使用索引覆盖扫描。

你可能感兴趣的:(mysql优化-全文索引)