美文网首页
Innodb和MyIsam的区别

Innodb和MyIsam的区别

作者: 吕艳凯 | 来源:发表于2020-04-06 10:09 被阅读0次

Innodb和MyIsam的区别

(1)对事务的⽀持不同
MyIsam不⽀持事务,⽽InnoDB⽀持事务。
(2)锁的级别⽀持不同
MyIsam只能⽀持表锁,⽽InnoDB能够⽀持⾏锁。
(3)全⽂索引的⽀持不同
MyIsam⽀持全⽂索引,⽽InnoDB不⽀持,⼀般加上sphinx组合⽀持
(4)索引实现⽅式不同
索引的数据结构均为B+树,MyIsam的索引为非聚簇索引,Innodb为聚簇索引

MyIsam的索引实现方式

MyIsam为非聚簇索引,索引与数据文件分别存储,索引存放在XX.MYI(MyIsam.index)⽂件,⽽数据存放在XX.MYD(MyIsam.data)⽂件中。
主索引:
在B+树的叶子节点存储key为唯一值,data数据为物理地址

image.png
辅助索引:
在B+树的叶子节点存储key不必是唯一值,data数据为物理地址
image.png

MyISAM索引检索的算法B+Tree搜索算法搜索索引,如果指定的Key存在,则取出data数据的物理地址,然后根据物理地址读取数据。

Innodb的索引实现方式

MyIsam为聚簇索引,只有一个数据文件(XX.IDB),数据文件本身即是B+树的数据结构。
主索引:
在B+树的叶子节点key为主键,data数据为表数据

image.png
辅助索引:
在B+树的叶子节点key为主键,data数据为主键数据
image.png
辅助索引查询时需要先查询出主键值,然后根据主键值找行数据
例外是覆盖索引(查询字段与查询使用索引包含字段相同)
覆盖索引只需访问索引⽂件,不需要回表调取数据,查找效率更⾼
为何?
因为对于 InnoDB 而言,索引存放的是所有字段的值,索引的data数据即包含需查询所有结果

InnoDB的数据文件本身要按主键聚集,因此InnoDB表必须包含主键。
如果没有指定主键,自动选择唯一列作为主键
没有唯一列,选择内置的ROWID作为主键

自动选择唯一列作为主键弊端
如果一个InnoDB表又没有显示主键,又有可以被选择为主键的唯一索引,但该唯一索引可能不是递增关系时(例如字符串、UUID、多字段联合唯一索引的情况),该表的存取效率就会比较差。
是因为唯一索引不是递增关系,在插入索引节点时,可能会在B+树的中间插入,会有导致B+树的频繁调整。

相关文章

  • mysql

    常见的储存引擎 InnoDB MyISAM MyISAM和InnoDB的区别 ①InnoDB支持事务,MyISAM...

  • 数据库引擎

    MyISAM和InnoDB区别

  • 常见面试题

    MyISAM和InnoDB的区别 MyISAM不支持事务,而InnoDB支持事务的。 MyISAM锁的粒度是表级,...

  • 文章总结(6)—数据库

    InnoDB和MyISAM存储引擎的区别 InnoDB使用的是行锁,MyISAM使用的是表锁; InnoDB支持事...

  • MySQL 篇 --- 2021-08-31

    MyISAM 和 InnoDB 的区别 MyISAM 查询效率更高,但是不支持事物 InnoDB 插入、更新较高,...

  • Innodb和MyIsam的区别

    Innodb和MyIsam的区别 (1)对事务的⽀持不同MyIsam不⽀持事务,⽽InnoDB⽀持事务。(2)锁的...

  • 数据库常见问题

    MyISAM和InnoDB 主要区别: 1).[事务]MyISAM是非事务安全型的,而InnoDB是事务安全型的,...

  • MySQL学习日记(十一)-技术问答

    一、MySQL主要存储引擎MyISAM和InnoDB的区别? 1、 存储结构 MyISAM:每个MyISAM在磁盘...

  • mysql的引擎、innodb/Myisam 的区别

    四种引擎:Memory、MYISAM、DBD、InnoDB、Archive MyISAM与InnoDB的区别MyI...

  • mysql(七)

    MySQL存储引擎-innodb 查看存储引擎 innodb和myisam的物理区别 innodb 核心特性 MV...

网友评论

      本文标题:Innodb和MyIsam的区别

      本文链接:https://www.haomeiwen.com/subject/wlrvphtx.html