一、概念
1.Innodb
InnoDB是一个事务型的存储引擎,设计目标是处理大数量数据时提供高性能的服务,它在运行时会在内存中建立缓冲池,用于缓冲数据和索引。
2.MyISAM
MyISAM是MySQL默认的引擎,它的设计目标是快速读取。
二、区别(适用场景、优缺点)
1.适用场景
InnoDB
1.需要事务的操作;
2.更新数据需要使用行级锁;
3.大数据量读写;
4.大型互联网应用。
MylSAM
1.不需要事务的操作;
2.插入、更新少,读取频繁;
3.频繁的统计计算。
2.优缺点
InnoDB
优点:
1.支持事务处理、ACID事务特性;
2.实现了SQL标准的四种隔离级别;
3.支持行级锁和外键约束;
4.可以利用事务日志进行数据恢复。
缺点:
不支持FULLTEXT类型的索引,因为它没有保存表的行数,当使用COUNT统计时会扫描全表。
MylSAM
优点:
1.高性能读取;
2.因为它保存了表的行数,当使用COUNT统计时不会扫描全表;
缺点:
1.不支持数据库事务;
2.不支持行级锁和外键;
3.INSERT和UPDATE操作需要锁定整个表;
4.不支持故障恢复;
三、关于索引
两种引擎所使用的索引的数据结构都是B+树
MyIASM引擎,B+树的数据结构中存储的内容实际上是实际数据的地址值。也就是说它的索引和实际数据是分开的,只不过使用索引指向了实际数据。这种索引的模式被称为非聚集索引。
Innodb引擎的索引的数据结构也是B+树,只不过数据结构中存储的都是实际的数据,这种索引有被称为聚集索引。
四、总结
- 数据库是否有外键?
- 是否需要事务支持?
- 是否需要全文索引?
- 数据库经常使用什么样的查询模式?在写多读少的应用中还是Innodb插入性能更稳定,在并发情况下也能基本,如果是对读取 速度要求比较快的应用还是选MyISAM。
- 数据库的数据有多大? 大尺寸倾向于innodb,因为事务日志,故障恢复。
参考文章: