MySQL索引


一、面试题

1、MySQL索引的优点和缺点是什么?

MySQL的InnoDB用B+树结构来实现索引和数据的存储
优点

  • B+树是平衡树,用来存储数据,可以大大减少数据检索时的磁盘IO次数,从而提升数据查询的性能
  • B+树索引在进行范围查找时更快,因为叶子节点是双向链表,只需要找到起始节点,然后往下遍历读取即可
  • 通过唯一索引,可以保证每一行数据的唯一性

缺点

  • 当执行增加、修改、删除操作时,会涉及索引的维护,当数据量较大时,索引的维护会带来较大的性能开销
  • 索引数不正确创建的话,会导致维护成本过高

2、为什么索引用B+树/B数,而不用其他数据结构?

  • B+树/B树是一种多路平衡树,它的高度相比其他二叉树,会矮很多
  • 因为数据库数据是存在磁盘上的,而磁盘IO效率很低(尤其是随机磁盘IO),所以树的高度能够决定磁盘IO的次数,磁盘IO次数越少,性能提升就越大

3、为什么索引用B+树,而不用B树?

  • 存储数量更多:B+树非叶子节点不存在数据,所以每一层能存储的索引数量会更多,意味着B+树在层高相同的情况下存储的数据量要比B要多,从而使磁盘IO次数更少
  • 范围查询更快:MySQL范围查询是一个频繁操作,而B+树的所有数据都存在叶子节点,用双向链表关联,意味着只需差两个节点进行遍历即可,而B树需要遍历所有节点
  • 查询稳定:因为B+树数据都是存在叶子节点,所以IO次数会更加稳定
  • 全局扫描能力更强:因为B+树数据都是存在叶子节点,只需要扫描叶子节点的双向链表,而B树需要遍历整个树

文章作者: GaryLee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 GaryLee !
  目录