什么是全文索引,何时应该使用它?

cdx*_*dxf 34 mysql

正如标题所述,什么是全文索引以及何时应该使用它?

Ale*_*lex 27

在数据库中,索引通常用于在查找where子句中定义的内容时增强性能.然而,当涉及到过滤某些文本时,例如使用类似的东西,WHERE TextColumn LIKE '%searchstring%'搜索速度很慢,因为常规数据库索引的工作方式针对列的"整个内容"而不仅仅是其一部分的匹配进行了优化.具体而言,包含通配符的LIKE搜索不能使用任何类型的索引.

正如下面的评论中提到的,MySQL需要MATCH () ... AGAINST在全文索引中搜索的语法; BTW根据数据库供应商的不同而不同.在MS SQL中,您可以使用,CONTAINS因此在计划支持其他数据库时请记住这一点.

全文索引更适用于常规文本,因为它们针对这些类型的列进行了优化.非常简化:他们将文本分成单词并对单词而不是整个文本进行索引.在查找特定单词时,文本搜索的速度要快得多.

  • FULLTEXT索引对LIKE子句不起任何作用 - 它们只用于`MATCH()... AGAINST`子句.以'%`通配符开头的LIKE子句无法通过*any*类型的索引有效地加速,并且总是很慢.因此,除非过滤已经很少的记录,否则应避免使用这种类型的LIKE子句. (13认同)
  • “因为常规数据库索引的工作方式针对与列的'全部内容' 而不仅仅是其中的一部分的匹配进行了优化。特别是 LIKE 搜索不能使用任何类型的索引。” - 这种说法是不正确的。当没有前导通配符时,索引确实与 LIKE 搜索一起使用。/sf/ask/132891741/ /sf/ask/413358781/ (4认同)
  • 换句话说,如果你_are_寻找与整个字符串完全匹配,那么使用FULLTEXT索引是错误的吗? (2认同)

Dan*_*ham 13

全文索引是您在MySQL数据库中应用于计划运行全文搜索的文本字段的索引.全文搜索使用match(field) against('text')语法.如果要运行全文搜索,则必须在要运行它的列上具有全文索引.

全文搜索有三种类型.我会引用手册,因为我觉得它最好:

  • 布尔搜索使用特殊查询语言的规则来解释搜索字符串.该字符串包含要搜索的单词.它还可以包含指定要求的运算符,以便在匹配的行中必须存在或不存在单词,或者它应该比通常更高或更低的权重.诸如"some"或"then"之类的常用词是停用词,如果存在于搜索字符串中则不匹配.IN BOOLEAN MODE修饰符指定布尔搜索.有关更多信息,请参见第11.9.2节"布尔全文搜索".

  • 自然语言搜索将搜索字符串解释为自然人类语言(自由文本中的短语)中的短语.没有特殊的运营商.禁用词列表适用.此外,50%或更多行中出现的单词被认为是常见的并且不匹配.如果没有给出修饰符,则全文搜索是自然语言搜索.

  • 查询扩展搜索是自然语言搜索的修改.搜索字符串用于执行自然语言搜索.然后将搜索返回的最相关行中的单词添加到搜索字符串中,然后再次进行搜索.查询返回第二次搜索中的行.WITH QUERY EXPANSION修饰符指定查询扩展搜索.有关更多信息,请参见第11.9.3节"使用查询扩展的全文搜索".

有关更多信息,请参阅全文搜索参考页面.