美文网首页
MySQL索引原理

MySQL索引原理

作者: ce5154e79490 | 来源:发表于2020-04-14 19:16 被阅读0次

索引是帮助MySQL高效获取数据的排好序的数据结构
索引的数据结构:

  • 二叉树

    image.png
  • 红黑树

  • hash表:通过计算hash值来存放数据,查找效率高,但是不适合范围查找

  • B-Tree
    叶子节点具有相同的深度
    叶子节点的指针为空
    叶子节点的数据索引从左到右递增排序

    image.png
  • B+Tree(B-Tree变种)
    MySQL默认索引
    非叶子节点不存储data,只存储索引,这样就可以存放更多的索引
    叶子节点不存储指针
    顺序访问指针,提高区间访问的性能

    image.png
    MyISAM索引文件和数据文件是分离的(非聚集)
    MySQL的数据都存储在MySQL安装目录的data文件夹下,库名下面是表名,不同的后缀表示不同的文件。其中,对于MyISAMM,后缀为frm的是表结构信息,MYD是表中的数据,MYI是表对应的索引MySQL的数据都存储在MySQL安装目录的data文件夹下,库名下面是表名,不同的后缀表示不同的文件。其中,对于MyISAMM,后缀为frm的是表结构信息,MYD是表中的数据,MYI是表对应的索引
    image.png

InnoDB索引实现(聚集)

image.png
  • 表数据文件本身即是按B+Tree组织的一个索引结构文件

  • 聚集索引的叶子节点包含了完整的数据记录

  • 为什么InnoDB必须有主键,并且推荐使用自增主键?
    因为: 主键用来做索引,整型是因为比较速度快(如果是字符串还得逐个比较,查ASCII码表);占用空间小,能存更多的索引(给每一个节点分配的内存大小是固定的);会导致树分裂,会破坏之前已经存储好的数据结构,效率很低

  • 为什么非主键索引结构叶子节点存储的是主键值?(一致性和节省存储空间)

  • 对于InnoDB,后缀为frm的是表结构信息,ibd文件是表中的数据和表对应的索引
    聚集索引:把数据和索引存储在同一个文件里面
    非聚集索引:把数据和索引存储在不同的文件里面

相关文章

网友评论

      本文标题:MySQL索引原理

      本文链接:https://www.haomeiwen.com/subject/ptsvgctx.html