什么是存储引擎
关系数据库表是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于Excel的电子表格的形式。有的表简单,有的表复杂,有的表根本不用来存储任何长期的数据,有的表读取时非常快,但是插入数据时去很差;而我们在实际开发过程中,就可能需要各种各样的表,不同的表,就意味着存储不同类型的数据,也就是需要不同存储引擎。
MySQL都有哪些存储引擎

可以看到,MySQL中一共有这么多存储引擎,但是实际开发中我们常用的只有InnoDB和MyISAM,如果想要看MySQL默认使用的引擎可以使用这个命令SHOW VARIABLES LIKE 'storage_engine';,MySQL5.5以后默认使用InnoDB存储引擎。
InnoDB存储引擎
InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,而且InnoDB是默认的MySQL引擎。
- InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事物安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句中提供一个类似Oracle的非锁定读。这些功能增加了多用户部署和性能。在SQL查询中,可以自由地将InnoDB类型的表和其他MySQL的表类型混合起来,甚至在同一个查询中也可以混合。
- InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何其他基于磁盘的关系型数据库引擎锁不能匹敌的。
- InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB将它的表和索引在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘文件)。这与MyISAM表不同,比如在MyISAM表中每个表被存放在分离的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。
- InnoDB支持外键完整性约束,存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显示在表定义时指定主键,InnoDB会为每一行生成一个6字节的ROWID,并以此作为主键。
- InnoDB被用在众多需要高性能的大型数据库站点上。
MyISAM存储引擎
- MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但
不支持事物 - 不支持行锁(MyISAM只有表锁),读取时对需要读到的所有表加锁,写入时则对表加排他锁
- 不支持外键
- 不支持崩溃后的安全恢复
- 一般应用在如下情况:
- 选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。
- 插入密集型的表。MyISAM的并发插入特性允许同时选择和插入数据。例如:MyISAM存储引擎很适合管理邮件或Web服务器日志数据。
InnoDB和MyISAM对比
| 特点 | InnoDB | MyISAM |
|---|---|---|
| 存储限制 | 64TB | 256TB |
| 事物 | 支持 | |
| 锁机制 | 行锁 | 表锁 |
| 全文索引 | 支持 | |
| 数据缓存 | 支持 | |
| 空间使用 | 高 | 低 |
| 内存使用 | 高 | 低 |
| 支持外键 | 支持 | |
| 关注点 | 事物 | 性能 |
如何选择合适的引擎
其实这个很灵活,既然MySQL默认的引擎是InnoDB,也就说InnoDB能做你绝大多数想做的东西。其实选择合适的引擎只用考虑如下几点就好:
- 事物
- 数据恢复
- 热备份
- 锁
参考资料
《高性能MySQL》
本文深入解析MySQL中的存储引擎,重点对比了InnoDB和MyISAM的特点及适用场景。InnoDB支持事务安全,行级锁定和外键,适用于需要高性能和数据一致性的应用场景;而MyISAM则在读取密集型和插入密集型操作中表现出色,但不支持事务和行级锁。文章还介绍了如何根据业务需求选择合适的存储引擎。
936

被折叠的 条评论
为什么被折叠?



