索引和算法
- 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);