美文网首页mysql 查询优化
mysql优化-全文索引

mysql优化-全文索引

作者: aix91 | 来源:发表于2018-12-13 17:55 被阅读0次

全文索引创建


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优化-全文索引

    全文索引创建 1. alter table [table_name] add FULLTEXT [index_na...

  • MySQL高级特性

    7.10 全文索引MySQL中只有MyISAM支持全文索引,没有全文索引也可以查询,只不过全表扫描速度会很慢。My...

  • MySQL数据库优化

    一、MySQL如何优化1、表的设计合理化(符合3F)2、添加索引(普通索引、主键索引、唯一索引、全文索引)3、SQ...

  • MySQL 5.7 中文全文检索使用教程

    在MySQL 5.7.6之前,全文索引只支持英文全文索引,不支持中文全文索引,需要利用分词器把中文段落预处理拆分成...

  • MySQL 5.7 +中文全文检索使用教程

    在MySQL 5.7.6之前,全文索引只支持英文全文索引,不支持中文全文索引,需要利用分词器把中文段落预处理拆分成...

  • 中文分词

    mysql全文索引 mysql4.0以上支持全文检索,但是存储引擎类型必须为MYISAM mysql5.6以上支持...

  • 全文搜索之MySQL与ElasticSearch搜索引擎

    一、MySQL自带全文搜索 MySQL支持全文索引和搜索功能。在MySQL中可以在CHAR、VARCHAR或TEX...

  • 面试总结答题篇

    MySQL目前主要有的索引类型:普通索引、唯一索引、主键索引、组合索引、全文索引。MyISAM支持全文索引,Inn...

  • MySQL全文索引抛出[Err] 188 - FTS query

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

  • sphinx(二)centos7编译安装coreseek3.2

    文章搜索我现在使用的是mysql的模糊查询like搜索标题关键字。 之前也有用全文索引,但是全文索引的效率比较低,...

网友评论

    本文标题:mysql优化-全文索引

    本文链接:https://www.haomeiwen.com/subject/bsqbhqtx.html