mysql存储引擎有哪些?InnoDB和MyISAM选哪个?
发布于 作者:苏南大叔 来源:程序如此灵动~

mysql
经典面试题,innodb
和myisam
这两个引擎有什么区别?本文里面,苏南大叔就说说个人的理解。肯定不是标准答案,因为网络流程的标准答案,也是很难理解的,对不?
苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程经验文章。本文测试环境:win10
,mysql@5.7.26
,mysql-front@5.3
。
有哪些存储引擎
mysql
引擎这事,其实对于大多数人无感,默认的就是innodb
。可以通过下面这条命令,看看mysql
都支持什么引擎。
show engines;
结果显示:除了innodb
和myisam
。mysql
还支持很多引擎,但是不怎么使用,从来没有听说谁用过。
数据表设置引擎
mysql
建立数据表的时候,可以设置使用哪个存储引擎的,也就是说可以某个表使用某个存储引擎。
建表语句如下:
CREATE TABLE `innodb` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
关键点:ENGINE=InnoDB
。
选哪个引擎
一般情况下,大家只在InnoDB
和MyISAM
之中做选择,其它引擎很少用。
- 一般来说,应该选择
InnoDB
,理由很简单,支持事务和外键,其可以做行级锁。 - 不需要事务不需要外键的话(这事儿也挺常见),使用
MyISAM
也是可以的。虽然不支持事务,但是支持表级锁,对于查询操作友好速度快。
引擎 | 事务 | 外键 | 锁 | 速度 | 容灾 |
---|---|---|---|---|---|
InnoDB | yes | yes | 表锁+行锁 | 没觉得比myisam慢 | 有方案 |
MyISAM | no | no | 表锁 | 据说快,对select非常友好 | 无,但是日常没备份么? |
物理文件
既然是存储引擎,两者在物理存储的文件上,还是有较大区别的。截图所示:
结语
权衡利弊之下,大多数人选择的就是默认的创新“InnoDB”引擎。更多mysql
经典经验文章,请点击苏南大叔的博客链接:


