当前位置: 代码迷 >> 综合 >> MySQL04-索引和算法
  详细解决方案

MySQL04-索引和算法

热度:61   发布时间:2023-11-15 05:19:12.0

索引和算法

  • InnoDB 的索引算法
  • B+树索引
    • 聚集索引
    • 辅助索引(非聚集索引)
    • 联合索引
  • 自适应Hash索引
  • 全文检索
    • 倒排索引
    • 全文检索查询

InnoDB 的索引算法

Hash索引
B+树索引
全文索引

B+树索引

聚集索引

InnoDB存储引擎表是索引组织表,即表中的数据按照主键的顺序存放。而聚集索引就是按照每张表的主键构造一颗B+树,同时叶子结点中存放的即为整张表的行记录数据,也将聚集索引的叶子结点称为数据页,
由于实际的数据页只能按照一颗B+树进行排序,因此每张表只能拥有一个聚集索引

聚集索引的存储并不是物理上连续的,而是逻辑上连续的(页通过双向链表链接,页按照主键排序;页中的记录也是通过双向链表进行维护的,物理存储上可以同样不按照主键存储)

辅助索引(非聚集索引)

叶子结点并不包含行记录的全部数据,叶子结点除了包含键值外,每个叶子结点还包含相应行数据的聚集索引键,所以当使用辅助索引查找数据时,InnoDB会首先遍历辅助索引B+树,获得指向主键索引的主键,然后在通过主键索引来找到一个完整的行数据。
在这里插入图片描述

联合索引

联合索引的底层也就是一颗B+树。由于构建一棵B+树只能根据一个值来确定索引关系,所以数据库依赖联合索引最左的字段来构建。
在这里插入图片描述

MySQL创建联合索引的规则是首先会对联合索引的最左边第一个字段排序,在第一个字段的排序基础上,然后在对第二个字段进行排序

自适应Hash索引

数据库自身创建并使用的,InnoDB存储引擎会监控对表上个索引页的查询,如果观察到建立Hash索引可以带来速度提升,则建立Hash索引,称为自适应Hash索引(AHI),AHI是通过缓冲池中的B+树页结构构造而成的,InnoDB会根据访问的频率和模式来自动地为某些热点页建立Hash索引。

全文检索

是将存储在数据库中的整本书,或整篇文章中的任意信息内容查找出来的技术。

例如,在博客中查询文章内容包含某些关键字的文章,电子商务网站,根据用户的查询条件,在可能需要的商品的详细介绍中进行查找,这些都不是B+树索引能很好完成的工作。

倒排索引

全文检索通常使用到的是倒排索引,它使用辅助表来实现,辅助表中存储的是关键词与所在文章的一个映射关系。它拥有两种表现形式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

全文检索查询

MySQL数据库支持全文检索的查询,语法为:

SELECT * FROM articles
WHERE MATCH (title,body)
AGAINST ('word' IN NATURAL LANGUAGE MODE);