InooDB与MyISAM

本文详细介绍了MySQL中InnoDB和MyISAM存储引擎的索引原理。InnoDB使用密集索引,每个叶子节点包含完整的行数据,确保数据的物理顺序。而MyISAM采用稀疏索引,叶子节点只存储键值和主键ID,需要二次索引查询获取完整行信息。InnoDB适用于事务处理和数据完整性要求高的场景,而MyISAM适合于读取密集型应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

存储引擎

密集索引与稀疏索引

  • 密集索引文件中的每个搜索码值都对应一个索引值

  • 稀疏索引文件只为索引码的某些值建立索引项

  • 密集索引:

    • 在这里插入图片描述

    • InnoDB索引检索流程:在这里插入图片描述

    • 定义:叶子节点不仅保存的是搜索的键值,还保存了当前行其他列的信息(简单理解就是其中一个叶子节点就是表中的一行数据),密集索引的顺序决定了表的物理顺序

    • inooDB中:每个表必须有且仅有一个密集索引

      • 选取规则1,如果一个主键被定义,该主键则作为一个密集索引
      • 选取规则2.如果没有主键,则表中第一个唯一非空索引作为密集索引
      • 选取规则3.如果以上条件都不满足,则会生成一个隐藏的主键作为密集索引
      • 注意点:非主键索引存储的都是当前索引键值的信息和指向主键索引树键的信息,通过非主键索引树查询或关联查询的时候可能就会出现再查询主键索引树
  • 稀疏索引:

    • 在这里插入图片描述

    • MyISAM索引检索流程:在这里插入图片描述

    • 定义:叶子节点仅保存了当前键位的信息和指定当前行的主键id信息,所以在通过稀疏索引查询指定行其他列信息的时候,就会有二次索引查询(先在稀疏索引中找到密集索引也就是主键索引的id再在主键索引树中找到该行的信息,并进行返回)

    • MyISAM中:主键索引和非主键索引没有什么不同,只是存储的键值内容不同

      • 1.表的数据存储在独立的地方
      • 2.每个索引树叶子节点都存储了该数据行的物理地址

InooDB与MyISAM的区别

  • 在这里插入图片描述

InooDB

  • 文件存储结构:在这里插入图片描述

  • 适用场景:在这里插入图片描述

MyISAM

  • 文件存储结构:在这里插入图片描述

  • 适用场景:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值