MySql索引原理(innoDB与MyISAM的区别)

一、索引数据结构

  • 索引是排好序的数据结构,帮助MySQL高效获取数据
    索引的数据结构有四种
  1. 二叉树
  2. 红黑树
  3. Hash表
  4. B-树

重点描述B树,还有B树的升级版—B+树,B+树是MySql索引主要的储存结构,Hash表在很少用,主要是Hash表不支持范围查找

  • B-树
  1. 叶节点具有相同的深度,叶节点的指针为空
  2. 所有索引元素不重复
  3. 节点中的数据索引从左到右递增排列
    在这里插入图片描述
  • B+树(B树的升级)
  1. 非叶子节点不存储data,只存储索引(冗余),可以放更多的索引
  2. 叶子节点包含所有索引字段
  3. 叶子节点用指针连接,提高区间访问的性能
    在这里插入图片描述
  • B树与B+树的区别
  1. 叶子节点:
    B树的叶子节点是独立的,B+树的叶子节点之间通过指针连接且叶子节点包含了索引字段
  2. 非叶子节点:
    B+数的非叶子节点储存(冗余)了父节点的指针左边的索引,只存储了索引,不存储数据,B树的非叶子节点储存了索引及数据
  3. 数据储存
    B树的非叶子节点储存了索引数据,B+树的非叶子节点只储存索引,相同的内存空间,B+树存放了更多的索引,储存同数量数量的索引B+树的深度比B数要低
  • Hash表
  1. 对索引的key进行hash算法散列出储存的位置
  2. Hash表比B+树更加高效
  3. 不支持范围查询, 仅能满足 “=”,“IN”关键字
  4. hash冲突问题

二、innoDB与MyISAM(储存引擎)

MyISAM索引实现

  • MyISAM储存引擎主要的组成

    • 结构文件
    • 数据文件
    • 索引文件
  • 非聚集索引
    数据文件和索引文件单独的文件称为非聚集

  • 新建表user选择引擎未MylSAM
    在这里插入图片描述
    在这里插入图片描述

  • 找到本地储存表的文件
    在这里插入图片描述

  1. user.frm(结构文件):储存表的数据结构类型(比如age的int类型,name的varchar类型)
  2. user.MYD(数据文件):储存表属性的数据(age的数据和name的数据)
  3. user.MYI(索引文件):储存表的索引和数据行的地址
  • 索引文件的储存
    MyISAM索引文件的叶子节点所在索引储存了指向数据行的地址文件
    在这里插入图片描述

innoDB索引实现

  • MyISAM储存引擎主要的组成

    • 结构文件
    • 数据文件
    • 索引文件
  • 非聚集索引
    数据文件和索引文件单独的文件称为非聚集

  • 新建一张部门表dept,储存引擎选择innoDB
    在这里插入图片描述
    在这里插入图片描述

  • 找到本地储存表的文件
    在这里插入图片描述

  1. user.frm(结构文件):储存表的数据结构类型(比如age的int类型,name的varchar类型)
  2. user.idb(索引数据文件):储存表的索引和数据
  • 索引数据文件的储存

索引数据文件的叶子节点储存了所在索引的行数据
在这里插入图片描述

MyISAM和InnoDB的区别

  • InnoDB支持事务, MyISAM不支持
  • InnoDB支持行级锁, MyISAM支持表级锁
  • InnoDB支持多版本并发控制(MVVC), MyISAM不支持
  • InnoDB支持外键, MyISAM不支持
  • MyISAM支持全文索引, InnoDB部分版本不支持(但可以使用Sphinx插件)
  • MYISAM 表有三个文件: 索引文件、表结构文件、数据文件, InnoDB表有二个文件: 索引数据文件、表结构文件
  • MYISAM采用非聚集索引, 索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致, 但是辅索引不用保证唯一性
  • InnoDB采用聚集索引( 索引的数据域存储数据文件本身), 辅索引的数据域存储主键的值; 因此从辅索引查找数据, 需要先通过辅索引找到主键值, 再访问辅索引; 最好使用自增主键, 防止插入数据时, 为维持 B+树结构, 文件的大调整

二叉树和B+树这里没有讲的那么详细,侧重于整理MySql的索引实现和储存引擎
描述不对的地方帮忙指出!!!!

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值