menu

Junjielee Blog

在平凡中坚持前行,总会遇见不凡的自己

Mysql索引介绍

索引类型

  • B-Tree索引:很适合查找范围数据,符合SQL查询:分组、排序、比较,不同存储引擎会有不同的存储结构
  • 哈希索引:Mysql中,只有Memory引擎显示支持(还有NDB集群引擎),适用于每次只查询一条记录
  • 空间数据索引(R-Tree):用作地理数据存储,查询时,可以有效地使用任意维度来组合查询
  • 全文索引:用于全文搜索
  • 其他索引类别:分形树索引(TokuDB引擎)、聚簇索引、覆盖索引等

索引的缺点

  1. 虽然大大提高查询速度,但降低了更新表的速度
  2. 占用磁盘空间的索引文件,如果在很大的表创建多种组合索引,索引文件膨胀很快

B-Tree索引的缺点

  1. 如果不按照索引最左列查到,则无法使用索引
  2. 不能跳过索引中的列
  3. 范围查询右边所有索引列无法使用索引

InnoDB的聚簇索引

聚簇索引是一种数据存储方式:B-Tree索引 + 数据行,一个表只能有一个聚簇索引

二级索引叶子节点保存的是行的主键值

InnoDB 和MyISAM的数据分布对比

MyISAM
从行号0开始递增,通过跳过一定长度来找到需要的行(行定长)
每个索引B-Tree的叶子节点存放:索引值+指向下一个叶子节点的指针+指向行的物理位置的指针

InnoDB
聚簇索引:索引值+指向下一个叶子节点的指针+事务TID+回滚指针RP+数据行,二级索引叶子节点存放索引值+主键值

覆盖索引

覆盖索引定义:一个索引包含所有需要查询的字段值,只能是B-Tree索引

优点:

  1. 减少磁盘I/O、减少内存使用
  2. 避免二次查询(InnoDB)

参考