MySQL全文索引 | 青训营笔记

112 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天

Day11

索引

索引分类

按功能逻辑分(面试内容)

普通索引、唯一索引、主键索引、全文索引、空间索引。

在主键字段上建立的索引被称为主键索引,非主键字段上建立的索引一般被称为辅助索引或二级索引或次级索引。

全文索引

MySQL5.6不支持汉字全文索引,且存储引擎必须为MyISAM

5.7.6版本才内嵌ngram全文解析器,才支持亚洲语种的分词,同时InnoDB引擎也开始支持全文索引。

  • 类似like+%模糊查询

  • 只能创建在CHAR、VARCHAR、TEXT等这些文本类型字段上

  • 使用全文索引查询时,条件字符数量必须大于3才生效

  • 如果想要创建出的全文索引支持中文,需要在最后指定解析器:with parser ngram

  • 如果想要使用全文索引对一个词语进行搜索,那这个词语的长度必须在最小搜索长度、最大搜索长度这两个值之间

  • 效率比like%模糊查询会更高

搜索模式
  • 自然语言模式(默认搜索模式)

    # article_name包含'MySQL'
    WHERE MATCH(article_name) AGAINST('MySQL');
    
  • 布尔搜索模式

    # 文章名中包含 [MySQL] 但不包含 [设计]
    WHERE MATCH(article_name) AGAINST('+MySQL -设计' IN BOOLEAN MODE);
    

    +:表示必须匹配的行数据必须要包含相应关键字。

    -:和上面的+相反,表示匹配的数据不能包含相应的关键字。

    >:提升指定关键字的相关性,在查询结果中靠前显示。

    <:降低指定关键字的相关性,在查询结果中靠后显示。

    ~:表示允许出现指定关键字,但出现时相关性为负。

    *:表示以该关键字开头的词语,如A*,可以匹配A、AB、ABC...

    "":双引号中的关键字作为整体,检索时不允许再分词。

    "X Y"@n""包含的多个词语之间的距离必须在n字节之间,如:

    • 竹子 熊猫@10:表示"竹子"和"熊猫"两个词语之间的距离要在10字节内。

    .......

  • 查询拓展搜索

    WHERE 
        MATCH(article_name) AGAINST('MySQL' WITH QUERY EXPANSION);
    

    这种模式下会比自然语言模式多一次检索过程,比如上述的例子中:

    • 首先会根据指定的关键词MySQL进行一次全文检索。
    • 然后第二阶段还会对指定的关键进行分词,然后再进行一次全文检索。
空间索引
  • 用的不多

  • GIS(理信息系统)

    一门新的学科,基于了计算机、信息学、地理学等多科构建的,主要就是用于管理地理信息的数据结构

  • 主要包含矢量数据、3D模型、影像文件、坐标数据等

  • MySQL总共支持GEOMETRY、POINT、LINESTRING、POLYGON四种空间数据类型