MySQL索引复习篇

索引的分类

  • 主键索引(PRIMARY):唯一的标识,主键不可重复,只能有一个列作为主键,不可以有null

  • 唯一索引(UNION):避免重复的列出现,多个列都可以设置,可以有null
    在这里插入图片描述

  • 常规索引(KEY):仅加速查询

  • 组合索引:多列值组成一个索引,专门用于组合搜索

  • 覆盖索引:要查询的列已经被索引列覆盖
    在这里插入图片描述

  • 全文索引(FULLTEXT)

1.聚集索引(主键索引)

  • InnoDB引擎是B+树索引组织而成的。B+树的叶子节点存储的都是数据段的数据
  • InnoDB对数据的存储必须依赖于主键,主键对应的索引叫聚集索引。假设你没有建主键,InnoDB会从表中寻找第一个非空的唯一索引作为聚集索引,但如果这也找不到,会生成一个不可见的ROW_ID的列,该列是一个6字节的自增数字,用来生成聚集索引。
  • 对于ROW_ID列的自增实现其实是来自于一个全局自增序列,这意味着所有使用到ROW_ID作为聚集索引的表都共享该序列,如果在高并发的情况就有保证不了唯一性的可能。

2.索引的数据结构

  • B tree :B树是二叉树的升级版,又叫平衡多路查找树。每个节点都存放数据
  • B+ tree :B+ 树是应文件系统所需而产生的一种 B树的变形树(文件的目录一级一级索引,只有最底层的叶子节点(文件)保存数据非叶子节点只保存索引,不保存实际的数据)。

3.B树和B+树的区别

B+树非叶子节点只保存索引,所有数据保存在叶子节点,叶子节点按照从小到大通过指针串起来的,所以B+树在范围查找会更快

4.B+树的优势

对于 B 树和 B+ 树来说,两种数据结构都是为了减少磁盘 I/O 读写过于频繁而生,可以让每层放尽量多的节点,以此来降低整棵树的高度。
b+树相比于b树的优点:

  • B+树的磁盘读写代价更低
    数据的聚集程度直接也影响了查询磁盘的次数
  • B+ 树查询效率更加稳定
    树高确定的前提下所有的数据都在叶子节点,那么无论怎么查询所有关键字查询的路径长度是固定的。
  • B+ 树对范围查询的支持更好(最大的优势)
    B+ 树所有数据都在叶子节点,非叶子节点都是索引,那么做范围查询的时候只需要扫描一遍叶子节点即可;而 B 树因为非叶子节点也保存数据,范围查询的时候要找到具体数据还需要进行一次中序遍历。

5.MyISAM 和 InnoDB 存储引擎的索引区别

  • MyISAM 也是使用 B+ 树作为索引存储结构,他的叶子节点 data 域存放的是数据的物理地址,即索引结构和真正的数据结构其实是分开存储的。也就是data放的是指针。
  • MyISAM 索引和数据是分离的,但是在 InnoDB 中却大不相同,InnoDB中采用主键索引的方式所有的数据都保存在主键索索引中叶子节点。即主键直接挂记录,基于主键来存储数据。所以这也是为什么 InnoDB 要求每个表都必须要有主键的原因。

6.索引的缺点

  • 磁盘空间占用
  • 对更新操作带来的时间损耗
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值