3.mysql存储引擎
3mysql存储引擎
3.1 mysql存储引擎有哪些
这是一个很常见的面试题,其实就是让我们说出并比较InnoDB和MyISAM。MySQL5.5之前,默认的存储引擎是MyISAM,之后都改为InnoDB了,具体你使用的mysql的存储引擎是什么,以及mysql存储引擎有哪些,我们可以在mysql上执行命令show engines;查看:

- 其中Support表示是否支持,DEFAULT表示默认的
- Transactions表示是否支持事务
- XA(eXtended Architecture)表示是否支持分布式事务标准,其实也就是我们常说的两阶段提交协议
- Savepoints是保存点,与rollback结合使用,实现回滚到指定保存点
3.2 各存储引擎的区别
其实看完2.1的图片,我们基本能够对InnoDB和MyISAM进行一个直观的比较了:
InnoDB引擎特点:
1.支持事务:支持4个事务隔离界别,支持多版本读。
2.行级锁定(更新时一般是锁定当前行):通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响。
3.读写阻塞与事务隔离级别相关(有多个级别,这就不介绍啦~)。
4.具体非常高效的缓存特性:能缓存索引,也能缓存数据。
5.整个表和主键与Cluster方式存储,组成一颗平衡树。(了解)
6.所有SecondaryIndex都会保存主键信息。(了解)
7.支持分区,表空间,类似oracle数据库。
8.支持外键约束,不支持全文索引(5.5之前),以后的都支持了。
9.和MyISAM引擎比较,InnoDB对硬件资源要求还是比较高的。
小结:三个重要功能:Supports transactions,row-level locking,and foreign keys
MyISAM引擎特点:
1.不支持事务
事务是指逻辑上的一组操作,组成这组操作的各个单元,要么全成功要么全失败。
2.表级锁定
数据更新时锁定整个表:其锁定机制是表级锁定,也就是对表中的一个数据进行操作都会将这个表锁定,其他人不能操作这个表,这虽然可以让锁定的实现成本很小但是也同时大大降低了其并发性能。
3.读写互相阻塞
不仅会在写入的时候阻塞读取,MyISAM还会再读取的时候阻塞写入,但读本身并不会阻塞另外的读。
4.只会缓存索引
MyISAM可以通过key_buffer_size的值来提高缓存索引,以大大提高访问性能减少磁盘IO,但是这个缓存区只会缓存索引,而不会缓存数据。
5.读取速度较快
占用资源相对较少
6.不支持外键约束,但只是全文索引
7.MyISAM引擎是MySQL5.5版本之前的默认引擎,是对最初的ISAM引擎优化的产物。
参考链接:https://blog.csdn.net/aizhupo1314/article/details/112384410

浙公网安备 33010602011771号