在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。
以下是几种常用的存储引擎的使用环境。
- InnoDB : 是 Mysql 的默认存储引擎,用于事务处理应用程序,支持外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询以外,还包含更新、删除操作,那么 InnoDB 存储引擎是比较合适的选择。InnoDB 存储引擎除了有效的降低由于删除和更新导致的锁定, 还可以确保事务的完整提交和回滚,对于类似于计费系统或者财务系统等对数据准确性要求比较高的系统,InnoDB 是最合适的选择。
- MyISAM : 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。
- MEMORY:将所有数据保存在 RAM 中,在需要快速定位记录和其他类似数据环境下,可以提供极快的访问。MEMORY 的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,其次是要确保表的数据可以恢复,数据库异常终止后表中的数据是可以恢复的。MEMORY 表通常用于更新不太频繁的小表,用以快速得到访问结果。
1.3 SQL 的执行流程是什么样的
- 客户端发送一条查询给服务器。
- 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段。
- 服务器端进行 SQL 解析、预处理,再由优化器生成对应的执行计划。
- MySQL 根据优化器生成的执行计划,再调用存储引擎的 API 来执行查询。
- 将结果返回给客户端。
2 MySQL 存储引擎调优
2.1 MySQL 服务器硬件优化
tips
硬件(cpu、内存等)相关
了解即可
关于提升硬件设备性能:
例如选择尽量高频率的 ** 内存(** 频率不能高于主板的支持)、提升网络带宽、使用 SSD 高速磁盘、提升 CPU 性能等。
CPU 的选择:
- 对于数据库并发比较高的场景,CPU 的数量比频率重要。
- 对于 CPU 密集型场景和频繁执行复杂 SQL 的场景,CPU 的频率越高越好
磁盘的选择
影响数据库最大的性能问题就是磁盘 I/O 为提高数据库的 IOPS 性能,可使用 SSD 或 PCIE-SSD 高速磁盘设备
磁盘 IO 的优化
可以用 RAID 来进行优化
常用 RAID(磁盘阵列)级别:
RAID0:也称为条带,就是把多个磁盘链接成一个硬盘使用,这个级别 IO 最好 RAID1:也称为镜像,要求至少有两个磁盘,每组磁盘存储的数据相同 RAID5:也是把多个(最少 3 个)硬盘合并成一个逻辑盘使用,数据读写时会建立奇偶校验信息,并且奇偶校验信息和相对应的数据分别存储在不同的磁盘上。当 RAID5 的一个磁盘数据发生损坏后,利用剩下的数据和响应的奇偶校验信息去恢复被损坏的数据
RAID1+0(建议使用):就是 RAID0 和 RAID1 的组合。同时具备两个级别的优缺点,一般建议数据库使用这个级别。