MySQL存储引擎之MyISAM和InnoDB

124 阅读2分钟

这是我参与8月更文挑战的第25天,活动详情查看: 8月更文挑战

MySQL是目前市面上非常常用的关系型数据库,就不过多介绍其产品特征了,这个也网上一搜一大堆。

今天我们主要来说一下MySQL的存储引擎,MySQL的存储引擎有好多种,平时我们用的最多,也是企业级系统中使用最广泛的就是MyISAM存储引擎和InnoDB存储引擎了。

当然了,其他的存储引擎是可以通过MySQL的SQL语句来查询出来的。

SQL如下:

show engines;

下面就来看看MyISAM存储引擎和InnoDB存储引擎的特点吧。

MyISAM存储引擎

MyISAM存储引擎自身的并发性比较差,这就很大程度导致了其使用的场景比较少。

不支持事务操作

因为其不支持事务操作,所以也就不存在事务的四大原则了,抛弃了事务操作,当然在一些场景下性能会提高很多。

不支持外键操作

不是不能设置外键,而是设置了外键不生效。

锁:表级锁

因为其默认的锁粒度是表级锁,所以就必然会导致其处理并发时性能会变差,试想如果多个并发请求同时访问一张表,这个时候因为表级锁,只能一个个的去处理请求。

但是这里也有个优点,就是加锁快,锁之间的冲突少,很少产生死锁的问题。

支持索引类型

MyISAM支持的索引类型有全局索引、B-TREE索引、R-TREE索引。

Select性能较高

适用于查询较多的情况

InnoDB存储引擎

支持事务操作

支持事务操作,默认隔离级别是可重复读,能够解决脏读和不可重复读的问题。

支持外键

支持外键。

锁:行级锁

InnoDB存储引擎支持锁粒度为行级锁,大大提升了并发性能,但是会存在出现死锁的情况。

索引类型

索引类型与MyISAM存储引擎相同,但是具体实现不同。

增删改性能较好

适用于增删改多的场景。