mysql index

索引的分类

从数据结构角度

  • B+tree
  • Hash
  • Full-texts 索引
  • R-Tree

从物理存储的角度

  • 聚集索引
  • 二级索引(辅助索引)

从索引字段特性角度

  • 主键索引
  • 唯一索引
  • 普通索引
  • 前缀索引

从组成索引的字段个数角度

  • 单列索引
  • 联合索引(复合索引)
数据结构角度
InnoDB,MyISAM 和 Memory 分别支持的索引类型
索引MyISAM引擎InnoDB引擎Memory引擎
B-Tree索引支持支持支持
HASH索引不支持不支持支持
R-Tree索引支持不支持不支持
Full-text索引支持不支持不支持
物理存储角度
InnoDB 的索引

InnoDB的主键索引与行记录是存储在一起的,故叫做聚集索引):

  • 没有单独区域存储行记录
  • 主键索引的叶子节点,存储主键,与对应行记录(而不是指针)
  • 画外音:因此,InnoDB的PK查询是非常快的。

因为这个特性,InnoDB的表必须要有聚集索引:

(1)如果表定义了PK,则PK就是聚集索引;

(2)如果表没有定义PK,则首个非空unique列是聚集索引;

(3)否则,InnoDB会创建一个隐藏的row-id作为聚集索引;

聚集索引,也只能够有一个,因为数据行在物理磁盘上只能有一份聚集存储。

InnoDB的二级索引可以有多个,它与聚集索引是不同的:

二级索引的叶子节点,存储主键(也不是指针)

回表查询:由于二级索引的叶子节点不存储完整的表数据,所以当通过二级索引查询到聚簇索引的列值后,还需要回到聚集索引也就是表数据本身进一步获取数据

索引覆盖:二级索引查询时,回表不是必须的过程,当 Query 的所有字段在二级索引中就能找到时,就不需要回表

MyISAM 的索引

MyISAM的索引与行记录是分开存储的,叫做非聚集索引

其主键索引与普通索引没有本质差异:

  • 有连续聚集的区域单独存储行记录
  • 主键索引的叶子节点,存储主键,与对应行记录的指针
  • 普通索引的叶子结点,存储索引列,与对应行记录的指针

MyISAM的表可以没有主键。

主键索引与普通索引是两棵独立的索引B+树,通过索引列查找时,先定位到B+树的叶子节点,再通过指针定位到行记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四美

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值