vlambda博客
学习文章列表

MySQL索引-数据结构与应用

  • 概念

    • 页:MySQL最小存储单元,大小为16KB

    • 单个索引数据中的数据大小不超过16B

    • 树高:索引树的高度,即层级个数;一页可以存储1024个索引数据,那么3个树高的表,可以存放1024*1024*1024行数据;当然树高是动态的。

    • 索引分唯一索引、单列索引、联合索引

    • 索引类型有Btree、Hash

  • 数据结构

    • Hash索引,首先计算索引列的Hash值,然后将Hash值与行数据以键值对的形式存放到Hash表中。

    • Btree索引分MyISAM、InnoDB两种结构

      • MyISAM:查询到索引后,根据其存储的磁盘位置找到行数据;特点是所有行数据的磁盘位置与每个索引都是一一对应的关系、不具有原子性、不支持事务、不支持外键。数据结构如下图

      • InnoDB:查询到索引后,直接在节点中获取行数据;特点是叶子节点与所有行数据都是一一对应的关系、支持事务、支持外键。数据结构如下图

  • 总结

    • Hash索引适合行数据不重复的情况,即唯一索引。

    • Btree的MyISAM索引适合写少、读多的单表。

    • Btree的InnoDB索引适合写多、读少、并发高的表