MySQL中常见的存储引擎有什么?
MySQL中有三种常见的引擎:InnoDB(默认)
,MyISAM
,Memory
。
InnoDB存储引擎作为MySQL的默认存储引擎有很多特点:
- B+树作为索引结构,叶子节点上存放表中的数据,非叶子节点存放索引。
- 支持事务ACID ----> 原子性,一致性,隔离性,持久性。
- 事务隔离级别。(读未提交,读已提交,可重复读,串行化)
- 支持外键。
- 支持表锁和行锁。
- 适合处理大量数据,性能好。
MyISAM引擎特点:
- 同样使用B+树作为索引结构,但与
InnoDB
不同的是,它的叶子节点data域存放的是数据记录的地址,在拿到叶子节点的地址后,再去磁盘中查找数据。 - 不支持事务。
- 支持表锁,不支持行锁。
- 不支持外键。
- 对事务完整性没有要求。
- 存储了行数。(意味着
select count(*) from t
速度很快,因为不用全表扫描,直接拿出它保存的数值就行) - 强调读取速度。
- 适合场景:如果一个表只需要查询,而不需要修改,删除的话,就可以使用这个引擎,加快效率。
Memory引擎特点:
- 使用保存在内存中的内容来创建表,每个MEMORY表只实际对应一个磁盘文件。
- MEMORY类型的表访问的非常的快,因为它的数据是放在内存中的,并且默认使用Hash索引。
- 因为在内存中进行操作,所以它的速度非常快(比MyISAM,InnoDB还要快),但是一旦关闭服务,表中的数据就会丢失,数据的安全性没有保证。
- 存储的数据必须是长度不变的格式。
所以,要是想要对SQL进行优化,也可以选择一个合适的引擎去加快查询速度,但要确保引擎的合理性。