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

简介: 本节书摘来自华章出版社《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平台上才能实现。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 缓存 关系型数据库
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
2587 57
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
|
存储 SQL 关系型数据库
MySQL存储引擎简介
在选择相应的存储引擎时,需要充分考虑实际业务场景、性能需求和数据一致性要求,从而为数据管理提供最佳支持。
591 17
|
SQL 关系型数据库 MySQL
数据库数据恢复——MySQL简介和数据恢复案例
MySQL数据库数据恢复环境&故障: 本地服务器,安装的windows server操作系统。 操作系统上部署MySQL单实例,引擎类型为innodb,表空间类型为独立表空间。该MySQL数据库没有备份,未开启binlog。 人为误操作,在用Delete命令删除数据时未添加where子句进行筛选导致全表数据被删除,删除后未对该表进行任何操作。
|
自然语言处理 Java 关系型数据库
Java mysql根据很长的富文本如何自动获取简介
通过使用Jsoup解析富文本并提取纯文本,然后根据需要生成简介,可以有效地处理和展示长文本内容。该方法简单高效,适用于各种应用场景。希望本文对您在Java中处理富文本并生成简介的需求提供实用的指导和帮助。
356 9
|
存储 关系型数据库 MySQL
MYSQL支持的存储引擎有哪些, 有什么区别
MYSQL存储引擎有很多, 常用的就二种 : MyISAM和InnerDB , 者两种存储引擎的区别 ; ● MyISAM支持256TB的数据存储 , InnerDB只支持64TB的数据存储 ● MyISAM 不支持事务 , InnerDB支持事务 ● MyISAM 不支持外键 , InnerDB支持外键
|
存储 Oracle 关系型数据库
索引在手,查询无忧:MySQL索引简介
MySQL 是一款广泛使用的关系型数据库管理系统,在2024年5月的DB-Engines排名中得分1084,仅次于Oracle。本文介绍MySQL索引的工作原理和类型,包括B+Tree、Hash、Full-text索引,以及主键、唯一、普通索引等,帮助开发者优化查询性能。索引类似于图书馆的分类系统,能快速定位数据行,极大提高检索效率。
291 8
|
存储 SQL 关系型数据库
MySQL存储引擎
本文介绍了数据库优化的多个方面,包括选择合适的存储引擎、字段定义原则、避免使用外键和触发器、大文件存储策略、表拆分及字段冗余处理等。强调了从业务层面进行优化的重要性,如通过活动设计减少外部接口调用,以及在高并发场景下的流量控制与预处理措施。文章还提供了具体的SQL优化技巧和表结构优化建议,旨在提高数据库性能和可维护性。
469 1
MySQL存储引擎
|
存储 关系型数据库 MySQL
MySQL存储引擎详述:InnoDB为何胜出?
MySQL 是最流行的开源关系型数据库之一,其存储引擎设计是其高效灵活的关键。InnoDB 作为默认存储引擎,支持事务、行级锁和外键约束,适用于高并发读写和数据完整性要求高的场景;而 MyISAM 不支持事务,适合读密集且对事务要求不高的应用。根据不同需求选择合适的存储引擎至关重要,官方推荐大多数场景使用 InnoDB。
929 7
|
存储 缓存 关系型数据库
【赵渝强老师】MySQL的MyISAM存储引擎
在MySQL5.1版本之前,默认存储引擎为MyISAM。MyISAM管理非事务表,提供高速存储和检索,支持全文搜索。其特点包括不支持事务、表级锁定、读写互阻、仅缓存索引等。适用于读多、写少且对一致性要求不高的场景。示例代码展示了MyISAM存储引擎的基本操作。
254 1
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL的InnoDB存储引擎
InnoDB是MySQL的默认存储引擎,广泛应用于互联网公司。它支持事务、行级锁、外键和高效处理大量数据。InnoDB的主要特性包括解决不可重复读和幻读问题、高并发度、B+树索引等。其存储结构分为逻辑和物理两部分,内存结构类似Oracle的SGA和PGA,线程结构包括主线程、I/O线程和其他辅助线程。
423 0
【赵渝强老师】MySQL的InnoDB存储引擎

推荐镜像

更多