《MySQL DBA修炼之道》——1.6 存储引擎简介

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 本节书摘来自华章出版社《MySQL DBA修炼之道》一书中的第1章,第1.6节,作者:陈晓勇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。 1.6 存储引擎简介 运行如下命令可查看表的引擎。

本节书摘来自华章出版社《MySQL DBA修炼之道》一书中的第1章,第1.6节,作者:陈晓勇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.6 存储引擎简介

运行如下命令可查看表的引擎。

mysql> show table status like 'sys_accont' \G
*************************** 1. row ***************************
                           Name: sys_accont
                        Engine: InnoDB

其中,Engine栏位表示使用的是何种引擎。
MySQL不同于其他数据库,它的存储引擎是“可插拔”的,意思就是MySQL Server的核心基础代码和存储引擎是分离的,你可以使用最适合应用的引擎,也就是说MySQL支持不同的表使用不同的引擎。MySQL拥有20多个引擎,下面介绍几个常用的引擎。
1.6.1 InnoDB引擎
在MySQL 5.5及以后的版本中,InnoDB是MySQL的默认引擎,这些年来,InnoDB一直在持续改进,处理能力不断提高,其优秀的性能和可维护性使它成为生产中普遍推荐使用的引擎。它的优点有:
灾难恢复性好。
支持全部4种级别的事务。默认的事务隔离级别是可重复读(Repeatable Read),它的事务支持是通过多版本并发控制(MVCC)来提供的。
使用行级锁。
对于InnoDB引擎中的表,其数据的物理组织形式是簇表(Cluster Table),数据按主键来组织,也就是说主键索引和数据是在一起的,数据按主键的顺序物理分布。数据表的另一种常见形式是非簇表,其索引是有序的,而数据是无序的。
实现了缓冲管理,不仅能缓冲索引也能缓冲数据,并且会自动创建散列索引以加快数据的获取。相比之下,MyISAM只是缓存了索引。
支持外键。
支持热备份。

注意 若无特殊说明,本书都是基于InnoDB引擎论述的。

1.6.2 MyISAM引擎
MyISAM是MySQL5.0/5.1的默认引擎,但MySQL官方的重心早已不在MyISAM引擎上了,近些年来,MyISAM一直没有大的改进,由于它有许多缺陷,如不支持事务、灾难恢复性差,所以不建议在生产环境中使用。
以下是MyISAM的一些特性。
可以配合锁,实现操作系统下的复制备份、迁移。
使用表级锁,并发性差。
支持全文检索(MySQL InonoDB在5.6以后也支持全文检索)。
主机宕机后,MyISAM表易损坏,灾难恢复性不佳。
无事务支持。
只缓存索引,数据的缓存是利用操作系统缓冲区来实现的。可能引发过多的系统调用且效率不佳。
数据紧凑存储,因此可获得更小的索引和更快的全表扫描性能。
1.6.3 MEMORY存储引擎
MEMORY存储引擎提供“内存”表,也不支持事务、外键。
使用内存表(内存引擎)可以显著提高访问数据的速度,可用于缓存会频繁访问的、可以重构的数据、计算结果、统计值、中间结果,但也有如下这些不足之处。
使用的是表级锁,虽然内存访问快,但如果频繁地读写,表级锁可能会成为瓶颈
所在。
只支持固定大小的行。VARCHAR类型的字段会存储为固定长度的CHAR类型,浪费空间。
不支持TEXT、BLOB字段。当有些查询需要使用到临时表(使用的也是MEMORY存储引擎)时如果表中有TEXT、BLOB字段,那么会转化为基于磁盘的MyISAM表,严重降低性能。
由于内存资源成本昂贵,一般不建议设置过大的内存表,如果内存表满了,就会在MySQL错误日志里发现类似“The table ‘table_name’ is full”这样的错误,可通过清除数据或调整内存表参数来避免报错。
服务器重启后数据会丢失,复制维护时需要小心,具体请参考第12章。
1.6.4 ARCHIVE存储引擎
ARCHIVE存储引擎是被设计用来存储企业中的大量流水数据的存储引擎。ARCHIVE引擎使用zlib无损数据压缩,让数据都保存在压缩的存档表中。当数据被插入时,它们被压缩。
它只支持INSERT和SELECT,支持自增键及其上的索引,不支持其他索引。它适合做日志记录、用户行为分析,不需要UPDATE、DELETE和索引的数据。
1.6.5 选择合适的引擎
表1-1列举了MySQL部分引擎的特性:是否支持事务、锁级别、是否支持热备份。其中,5.0版本、5.1版本默认的引擎是MyISAM,5.5版本、5.6版本默认的引擎是InnoDB。
1

那么如何选择合适的引擎呢?以下是选择引擎时需要考虑的一些因素。
是否需要事务支持。
是否为高并发,InnoDB实现了行锁,这方面的表现大大优于MyISAM。
索引,不同存储引擎的索引实现不尽相同。
是否需要外键。
高效缓冲数据,InnoDB缓冲数据而MyISAM只缓冲了索引。
备份,是否需要支持热备份。
我们可以灵活地选择引擎,但是从维护的角度来说,维护统一的存储引擎会更方便,所以或者全部是MyISAM,或者全部是InnoDB引擎在现实生产中更常见,也更易于管理。
1.6.6 选择何种平台
业内普遍的做法是把MySQL部署在Linux系统下,所以如果不加特别说明,本书指的都是Linux下的MySQL部署、使用。为什么互联网公司的生产环境一般使用Linux操作系统,而不考虑在Windows上部署安装MySQL呢?部分原因如下所示。
一般来说,部署在Unix/Linux环境下的软件程序往往有更高的运行效率。因为这样一个事实:不同的操作系统在它们所采用的进程和线程模型方面有着相当大的差异。Unix/Linux编程模型对Apache和MySQL等软件进行优化的工作不仅开始得最早,进行得也最全面彻底,而Windows在这方面就远远落后了。
Oracle公司在收购MySQL后,对Windows版本做了一些增强,这样做更多的是出于商业的考虑,Windows PC和Windows Server的市场占有率高,无论是作为开发环境或独立软件供应商的后台数据库,Windows下的MySQL都有其巨大的商业价值,而且可以对MS SQL Server构成一定的威胁,但如果想要获得更好的性能、更高的吞吐量,仍然只有在Linux平台上才能实现。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 缓存 关系型数据库
Mysql的两种存储引擎以及区别
Mysql的两种存储引擎以及区别
15 1
|
1月前
|
存储 关系型数据库 MySQL
Mysql第七天,存储引擎
Mysql第七天,存储引擎
60 0
Mysql第七天,存储引擎
|
1月前
|
存储 关系型数据库 MySQL
【MySQL 数据库】5、存储引擎
【MySQL 数据库】5、存储引擎
107 0
|
1月前
|
关系型数据库 MySQL 数据库
Mysql基础第五天,Mysql简介
Mysql基础第五天,Mysql简介
29 0
Mysql基础第五天,Mysql简介
|
1月前
|
存储 关系型数据库 MySQL
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
169 0
|
3月前
|
存储 SQL 关系型数据库
Mysql系列-4.Mysql存储引擎-InnoDB(下)
Mysql系列-4.Mysql存储引擎-InnoDB
46 0
|
2月前
|
SQL 关系型数据库 MySQL
MySQL技能完整学习列表3、SQL语言基础——1、SQL(Structured Query Language)简介——2、基本SQL语句:SELECT、INSERT、UPDATE、DELETE
MySQL技能完整学习列表3、SQL语言基础——1、SQL(Structured Query Language)简介——2、基本SQL语句:SELECT、INSERT、UPDATE、DELETE
51 0
|
2月前
|
存储 缓存 关系型数据库
MySQL - 存储引擎MyISAM和Innodb
MySQL - 存储引擎MyISAM和Innodb
|
1月前
|
存储 缓存 关系型数据库
MySQL两种存储引擎及区别
MySQL两种存储引擎及区别
23 4
MySQL两种存储引擎及区别
|
15天前
|
存储 缓存 关系型数据库
mysql存储引擎
mysql存储引擎