Ezio's Blog
Posts Categories Tags Music Mood About
Ezio's Blog· Light
☰ Menu
Posts Categories Tags Music Mood About
Expand all Back to top Go to bottom

MyIsam和InnoDB的区别

Author: Ezio Date: April 17, 2021  9:42:43 Category: MySQL

MyIsam 和 InnoDB 的常见区别:

  1. 事务

​ InnoDB 支持事务,MyISAM 不支持事务。这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一。

  1. 外键

​ InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败。

  1. 索引

    InnoDB 是聚集(聚簇)索引,MyISAM 是非聚集(非聚簇)索引。

  2. 锁粒度方面

​ InnoDB最小的锁粒度是行锁,MyISAM最小的锁粒度是表锁

​ 一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。

​ 这也是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一。

  1. 硬盘存储结构

​ InnoDB存储引擎存储数据库数据,一共有两个文件(没有专门保存数据的文件):

	* Frm文件:表的定义文件
	* Ibd:数据和索引存储文件。数据以主键进行聚集存储,把真正的数据保存在叶子节点中。
	* MyISAM的话,在磁盘上存储成三个文件。(不同的扩展名)
	* .frm文件存储 表的定义。
	* .MYD 数据文件(MYData)
	* .MYI 索引文件 (MYIndex)

聚簇索引 和 非聚簇索引

1.聚簇索引(InnoDB)
将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据。

表数据按照索引的顺序来存储的,也就是说索引项的顺序与表中记录的物理顺序一致。

InnoDB中,在聚簇索引之上创建的索引称之为辅助索引,像复合索引、前缀索引、唯一索引等等。

聚簇索引默认是主键,如果表中没有定义主键,InnoDB 会选择一个唯一的非空索引代替。
如果没有这样的索引,InnoDB 会在内部生成一个名为 GEN_CLUST_INDEX 的隐式的聚簇索引。

2.非聚簇索引(MyISAM)

将数据与索引分开存储,表数据存储顺序与索引顺序无关。

Author: Ezio

Permalink: https://ezioy.cn/2021/04/17/MyIsam%E5%92%8CInnoDB%E7%9A%84%E5%8C%BA%E5%88%AB/

License: Copyright (c) 2019 CC-BY-NC-4.0 LICENSE

Slogan: Nothing is true,Everything is permitted

Tag(s): # MySQL
back · home
HashMap Java8-Predicate函数
Ezio © 2019 - 2026 | Powered by Hexo & Chic | 访客数量:   浏览次数: | 渝公网安备50011302222043 | 渝ICP备2023013933号-1