首页 > 编程知识 正文

mysql做全文检索,mysql hash索引

时间:2023-05-04 10:00:59 阅读:37906 作者:2478

MyISAM全文索引面向“全文集合”,将所有需要索引的列连接到字符串中并进行索引。 这是一种特殊的双BTree索引,共有两个层次,第一个层次是所有关键字,每个关键字都有一组文档指针。

全文索引的单词过滤规则:

1 .禁止字列表中的字不被索引。 默认的禁止字基于普通英语设置,可以使用参数ft_stopword_file指定一组使用自定义禁止字的外部文件

2 .长度小于ft_min_word_len的单词和长度小于ft_max_word_len的单词不会被索引

全文索引不存储关键字与哪个列具体匹配。 如果需要对每列进行组合查询,则不需要为每列编制索引。 因此,在MATCH AGAINST子句中,所有列的相关性同等重要。

自然语言全文索引

关联度在:索引中出现次数越少的词,关联度越高,如果在此处发生50%以上的自然语言检索,则不会检索该词。 因此,如果数据集合较少,则全文索引查询通常不会返回结果

自然语言全文索引查询示例:

SELECT film_id、title、right (描述,25 )、

匹配(title,描述)代理(factorycasualties ) asrelevancefromsakila.film _ textwherematch ) title,描述

与常规查询不同,自然语言全文索引按相关顺序排序。 一次查询两次匹配)不会产生额外的消耗,MySQL会自动识别并搜索值。 另外,MATCH ) )函数中指定的列必须与索引的列完全相同,才能使用全文索引

布尔型全文索引

布尔全文索引可以使用特定前缀修饰符自定义索引。 功能如下图所示

使用案例

SELECT film_id、title、right (描述,25 ) froms akila.film _ textwherematch (title,描述) )。

代理(工厂评估集成模式) )。

结果准确一致,只有一个记录

全文索引限制

1 .全文索引在完全读取内存之前并不是很快。 否则,会产生大量的随机IO,因此速度非常低

2 .全文索引的操作成本较大,修改一段文本的100个单词需要100次索引操作

如果使用匹配代理的列具有全文索引,则无论性能如何,都将使用该全文索引,而忽略其他可用索引。 (新版本似乎对此有所改进,但如果有更好的索引就使用。) )。

4 .全文索引只能全文检索,其他WHERE条件只能在全文检索返回记录后执行

5 .全文索引不包含索引列的实际值,因此无法进行索引复盖扫描

6 .如果需要使用非依赖性排序全文索引,则必须使用文件排序(filesort )

优化全文索引

使用优化表减少碎片问题

2 .保证索引缓存足够大

3 .若要使用适当的同义词库(例如,索引与MySQL相关的文档),建议在同义词库中包含“MySQL”。 因为在这些文件中这个词经常出现

4 .忽略太短的词语会提高全文索引的效率,但同时检索精度会降低。 这需要权衡

5 .如果需要将大量数据导入包含全文索引的表中,请首先在DISABLE KEYS中禁用索引,然后在导入完成后在ENABLE KEY中打开索引

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。