MySql(28)InnoDB和MyISAM索引对比

MyISAM索引原理

MyISAM的索引文件仅保存数据记录的地址

主键索引和二级索引结构上没有任何区别,只是主键索引要求Key是唯一的,而二级索引Key可以重复。
在这里插入图片描述

MyISAM 和 InnoDB对比

MyISAM的索引方式都是"非聚簇"的,与InnoDB包含一个聚簇索引不同

  1. 在InnoDB存储引擎中,我们只需要根据主键值对 聚簇索引 进行一次查找就能找到对应记录,而在 MyISAM 中却需要一次 回表
    这就意味着 MyISAM 建立的索引全部都是 二级索引
  2. InnoDB的数据文件本身就是索引文件,MyISAM索引文件和数据文件是分离的,索引仅保存记录的地址。
  3. InnoDB的非聚簇索引data域存储相应记录 主键的值,而MyISAM索引记录的是地址。
  4. MyISAM的回表很快,以为拿着地址偏移量可以直接取到数据。而InnoDB使用主键回表。

优化逻辑

  1. 知道了InnoDB索引实现后,就很容易明白 为什么不建议使用过长的字段作为主键。因为所有二级索引都引用主键索引,过长的主键索引会令二级索引变的过大。
  2. 用非单调的字段作为主键在InnoDB中不是个好主意,在插入新记录时,数据为了维持 B+Tree的特性而频繁分裂调整,十分低效而自增字段作为主键是一个好的选择

索引的代价

  • 空间上的代价
    • 每建立一个索引都要建立一颗B+Tree,每个节点都是一个数据页,一个页默认会占用16kb的空间。
  • 时间上的代价
    • 对表中数据进行 增删改操作时,都需要去需改各个B+Tree索引。需要进行 记录位移页面分裂页面回收等操作来维持 B+Tree。
      页面回收`等操作来维持 B+Tree。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值