从磁盘IO的角度来看待索引

MySQL索引是一个B+树,相对于普通的平衡二叉树来说每个节点指向更多的节点,相对于B(B-)树来说,只有叶子节点存储真实的数据。
image.png
image.png

因为B+树的检索方式应当:

  • InnoDB存储引擎中,主键尽量避免使用很长的字段
    叶子节点上存储的是主键,较小的主键的长度能够减低树的高,减少IO的次数。

  • 在保障索引区分度的情况下,被索引字段尽量不要太长
    普通索引上,非叶子节点存储的是被索引的字段,被索引字段太长也会影响到树高,B+树中每一个节点就是一个Page(16k),每增加一层就会多一次IO。但是需要考虑索引区分度,找到最合适的索引值。
    下图可看出,取前4-5位作为索引最合适:


    image.png

    添加前缀索引:


    image.png
  • 查询中可以利用索引覆盖,索引下推,避免不必要的回表
    索引覆盖,索引下推能减少回表次数,提高速度。

  • 不要建立太多索引
    技术没有银弹!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • MySQL 如何正确的使用索引 真致信息技术 2019-11-13 17:46:04 学习索引,主要是写出更快的s...
    有点意思_yxwn阅读 3,863评论 0 5
  • 学习索引,主要是写出更快的sql,当我们写sql的时候,需要明确的知道sql为什么会走索引?为什么有些sql不走索...
    AnyL8023阅读 3,255评论 0 0
  • 原文链接:MySQL | 05 如何设计高性能的索引? 上回我们主要研究了为什么使用索引,以及索引的数据结构。今天...
    hoxis阅读 3,909评论 0 5
  • Mysql两种索引结构:B+Tree索引和Hash索引的区别和使用场景 Hash索引:使用hash散列的形式,已K...
    小亮__阅读 3,157评论 0 5
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 12,195评论 16 22