[DB] MySQL 索引分类

按数据结构

  • B树索引
    • 数据位于叶子节点,到任何一个叶子节点的距离相同,一般不超过3-4层
    • B+树索引:每个叶子节点除了数据还存放前后叶子节点的指针,方便快速检索,是InnoDB采用的索引结构
  • Hash索引
  • Fulltext索引
  • R树索引

按实现方式

  • 聚集索引(聚簇索引)
    • 叶子节点存放行数据
    • 将索引行直接存储在索引中
    • 优点:数据访问快
    • 缺点:
      • 插入速度严重依赖插入顺序,按主键顺序插入最快,否则会出现页分裂影响性能
      • 更新主键代价很高
      • 二级索引访问需要两次索引查找(主键-->行数据)
  • 非聚集索引(非聚簇索引)
    • 在聚簇索引之上创建的索引
    • 叶子节点存储主键值,或指向数据行的指针
    • 访问数据需要二次查找,第一次找到主键值,第二次根据主键值找到行数据

按对应键

  • 主键索引
    • InnoDB下是聚簇索引,MyISAM下是非聚簇索引
    • 叶子节点只能按一棵B+树排序,故一张表只能有一个
  • 辅助键索引(二级索引)
    • 不影响聚簇索引中数据的组织,一张表可以有多个

按存储引擎

  • InnoDB
    • 主索引:保存数据,key是表的主键
    • 辅助索引:记录主键的值而不是地址
    • 实现方式:聚集索引(数据和索引在一起)
  • MyISAM
    • 主索引:索引和数据分离,索引叶子节点仅保存数据地址
    • 辅助索引:和主索引无区别
    • 实现方式:非聚集索引(数据和索引不在一起)

参考

https://www.cnblogs.com/jiawen010/p/11805241.html

https://www.jianshu.com/p/fa8192853184

猜你喜欢

转载自www.cnblogs.com/cxc1357/p/12940326.html