索引知识

1.1 索引的概念

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

1.1.1 索引数据结构

  • 二叉树

  • 红黑树

  • Hash表

  • B-Tree

1.1.2 二叉树

二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。

缺点:

比如插入元素为: 1 2 3 4 5 6 7,二叉树的结构会变成链表,查询数据时,逐行查找,效率慢

1.1.3 红黑树

红黑树(Red Black Tree) 是一种自平衡二叉查找树,一种数据结构

缺点:

红黑树结构的表结构, 如果存储的数据量很大,红黑树树的高度也很大,如果要查询的数据在红黑树的叶子节点,那么查询的效率会很慢。

改进:

扩展单个节点存储的索引个数,存储越多,树的高度越小

1.1.4 B-Tree ( 单个节点存储多个索引)

  • 叶节点具有相同的深度,叶节点的指针为空

  • 所有索引元素不能重复

  • 节点中的数据索引从左到右递增

  • 节点大小 16K

查询时将节点加载到内存中,对元素进行比较,如果元素比某个索引小,则再将该索引的左子树加载到内存再进行比较。

1.1.5 B+Tree

B+Tree 是在B-Tree上的一种优化, InnoDB存储引擎就是B+Tree实现的

B+Tree 与 B-Tree 有什么不同?

  • 非叶子节点不存储data,只存储索引,可以放更多的索引

  • 所有叶子节点之间都有一个链指针,可以提高区间访问的性能

  • 数据记录都存储在叶子节点中

1.1.6 Hash表

将每一个元素做一次哈希计算,确定存储位置。

缺点:

适合于等值数据查找,但不适合于范围查找

1.2 存储引擎

MySQL中数据用各种不同的技术存储在文件(或内存)中,这些技术使用不同的存储机制、索引技术、锁定水平。

1.2.1 存储引擎分类

  • myisam (非聚集)

    myisam索引文件和数据文件时分离的(非聚集),查询时会跨越两个文件

    数据存储结构

    一张表有三个文件:如t_song表

    t_song.frm:存储的是数据表的基本结构

    t_song.MYD:存储数据表的记录

    t_song.MYI:存储数据表的索引

  • innodb实现了聚集索引

    • MySQL默认的存储引擎,支持ACID事务

    • 数据文件本身就是按照B+Tree构建的索引结构文件

    数据存储结构

    一张表只有两个文件,如t_log:

    t.log.frm 数据表的基本结构

    t.log.idb 数据表的索引和记录

    聚集索引

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

1.2.2 为什么InnoDB必须有主键,并且推荐使用整型的自增主键?

  • 有主键才可以构建B+Tree索引结构。

  • 数据查找时,会将索引加载到内存中进行大小比较,整型相对其他的字符类型较为合适,因为字符类型的比较是一个字母、一个字母的比较。

1.2.3 为什么B+Tree会有一个链指针?

为了满足范围数据查找的需求,为了更好的定位下一个数据位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值