innodb | myisam | |
事务 | 支持事务 | 不支持事务 |
索引 | 聚集索引,使用 B+ 树作为索引结构,数据文件和索引绑在一起,必须要有主键。主键索引一次查询;辅助索引两次查询,先查询主键,再查询数据 。 | 非聚集索引,使用 B+ 树作为索引结构,索引和数据文件是分离的。主键索引和辅助索引是独立的。 |
锁 | 支持行锁、表锁。行锁是实现在索引上的,如果没有索引,就没法使用行锁,将退化为表锁。 | 支持表锁。 |
主键 | 必须有主键,没有指定主键会默认生成一个隐藏列作为主键。 | 可以没有主键。 |
外键 | 支持外键 对一个包含外键的InnoDB表转为MyISAM会失败 在大数据高并发场景下,建议都不使用外键,通过应用程序保证完整性。 | 不支持外键。 |
并发量 | 并发量较大。 | 并发量较小。 |
数据库文件 | frm是表定义文件,ibd是数据文件。支持两种存储方式:
| frm是表定义文件,myd是数据文件,myi是索引文件。支持三种存储格式:静态表(默认,注意数据末尾不能有空格,会被去掉。)、动态表、压缩表。 |
count(*) | select count(*) from student 会扫描全表。 因为事务特性,在同一时刻表中的行数对不同的事务是不一样的,所以没有保存表的行数。 | select count(*) from student 会直接取出该值。 保存了表的行数,但有where条件后,二者引擎的处理逻辑类似,都是扫描全表。 |
全文索引 | 在5.7及以后的版本中增加了全文索引。 | 支持全文索引。 |
如何选择 | 表中既有读也有写而且非常的频繁可以考虑。 | 表中绝大多数都只是读查询,可以考虑。 |
INNODB和MYISAM的区别
最新推荐文章于 2025-05-19 01:03:55 发布