索引原理

Posted kbman

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了索引原理相关的知识,希望对你有一定的参考价值。

什么是索引?

索引在mysql中也叫做键,是存储引擎快速找到记录的一种数据结构。

目的:提高查询效率

本质:不断缩小获取数据的范围,找到最终结果。

索引数据结构

b+树应运而生(B+树是通过二叉查找树,再由平衡二叉树,B树演化而来)

一步步确定数据范围,层级越高,查询越慢,层级越低,查询越快。

叶子节点,是个磁盘块,存放所有真实数据。

在数据库中,B+树的高度一般在2~4层,这也就是说查找某一个键值的行记录时最多只需要2到4次IO,这倒不错。
技术图片

聚集索引和辅助索引

不管聚集,辅助,内部都是B+树形式。叶子节点,是个磁盘块,存放所有真实数据。

聚集索引

按照每张表的主键构造B+树,叶子节点存放整张表行记录数据。

好处:

  • 对主键的排序查找和范围查找速度很快,叶子节点的数据就是用户所要的数据。
  • 范围查询
  • 把主键id作为索引,ID占空间小,而且一定空间内能占的数量大。

辅助索引

表中除了聚集索引外,其他都是辅助索引。unique,index其他字段的索引都是辅助索引。

辅助索引存的是字段对应的记录的ID值。

覆盖索引

select的字段和查询字段一样叫覆盖索引。

mysql索引管理

功能

  • 索引的功能就是加速查找
  • 主键,unique唯一键也都是索引,这些索引除了加速之外,还有约束的功能。

mysql常用索引

  • 唯一索引:
    • 主键索引 primary key:加速查找+约束(不为空,不重复)
    • 唯一索引 unique:加速查找+约束(不重复)
  • 普通索引:index 加速查找
  • 联合索引
    • primary key(id, name):联合主键索引
    • unique(id, name):联合唯一索引
    • index(id, name):联合普通索引

以上是关于索引原理的主要内容,如果未能解决你的问题,请参考以下文章

「Mysql索引原理(七)」覆盖索引

InnoDB索引查询原理

Lucene底层原理和优化经验分享-Lucene简介和索引原理

MySQL 索引原理以及查询优化

GP索引调优测试--原理篇

GP索引调优测试--原理篇