首页 文章 正文 Mysql-存储引擎 2024-06-23 1257阅读 0评论 一 、简介 存储引擎是数据库管理系统 (DBMS) 中的一种组件,负责管理数据库的物理存储、数据的读写操作以及相关的存储管理。不同的存储引擎在数据处理、性能优化和功能支持上有所不同,因此可以根据具体应用需求选择合适的存储引擎。 存储引擎的主要功能 数据存储:定义如何将数据物理存储在磁盘上,包括数据文件的格式和存储位置。 数据读写:处理对数据库的读写操作,包括插入、更新、删除和查询等。 事务处理:支持或不支持事务处理(事务是一组数据库操作的集合,要么全部执行,要么全部不执行),例如 InnoDB 支持事务而 MyISAM 不支持。 锁机制:管理并发访问时的数据锁定机制,以防止数据不一致或竞争条件。行级锁定和表级锁定是两种常见的锁机制。 索引管理:支持创建和管理索引以加速查询操作,不同存储引擎支持不同类型的索引。 数据完整性:保证数据的准确性和一致性,包括支持外键约束等。 崩溃恢复:提供数据恢复机制,以在系统崩溃后恢复数据。 二、常见的 MySQL 存储引擎 InnoDB:默认存储引擎,支持事务、行级锁定和外键约束,适合高并发和需要数据完整性的应用。在 MySQL 5.5之后,InnoDB是默认的 MySQL 存储引擎。 MyISAM:不支持事务和外键,表级锁定,适合读密集型操作。 MEMORY:数据存储在内存中,速度快,但不适合持久存储,适用于临时数据。 CSV:数据存储在 CSV 文件中,便于数据交换,但不支持索引和复杂查询。 ARCHIVE:用于存储大量的历史数据,压缩存储,适合需要较小存储空间的日志数据。 NDB (Cluster):用于 MySQL Cluster,支持高可用性和高可扩展性。 FEDERATED:允许访问远程 MySQL 服务器上的表,适合分布式数据库系统。 三、Mysql体系结构 连接层 最上层是一些客户端和链接服务,主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。 服务层 第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。 引擎层 存储引擎真正的负责了MySOL中数据的存储和提取,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎。 存储层 主要是将数据存储在文件系统之上,并完成与存储引擎的交互。 在创建表时,指定存储引擎 CREATE TABLE 表名( 字段1字段1类型「COMMENT 字段1注释] 字段n 字段n类型[COMMENT 字段n注释])ENGINE=INNODB[COMMENT 表注释]; 查看当前数据库支持的存储引擎 SHOW ENGINES ; 四、存储引擎比较 特点 InnoDB MyISAM Memory 存储限制 64TB 有 有 事务安全 支持 - - 锁机制 行锁 表锁 表锁 B+tree索引 支持 支持 支持 Hash 索引 - - 支持 全文索引 支持(5.6版本后) 支持 - 空间使用 高 低 N/A 内存使用 高 低 高 批量插入速度 低 高 高 支持外键 支持 - - 五、InnoDB 表空间文件说明 InnoDB 支持两种表空间管理模式:共享表空间 (Shared Tablespace) 和 独立表空间 (File-Per-Table Tablespace)。默认情况下,从 MySQL 5.6 版本开始,InnoDB 使用的是独立表空间模式。 共享表空间 (Shared Tablespace) 在共享表空间模式下,所有 InnoDB 表的数据和索引都存储在一个或多个共享表空间文件中。默认的共享表空间文件名为 ibdata1。这个文件通常位于 MySQL 数据目录下。特点: 所有表的数据和索引都存储在同一个或多个共享文件中。 管理简单,不需要为每个表单独管理文件。 随着数据量的增加,文件会变得很大,难以单独管理某个表的数据。 删除表后,空间不能立即回收。 独立表空间 (File-Per-Table Tablespace) 在独立表空间模式下,每个 InnoDB 表的数据和索引存储在一个独立的 .ibd 文件中。这个文件存储在对应数据库目录下。特点: 每个表的数据和索引存储在独立的 .ibd 文件中。 便于管理单个表的数据和空间,可以单独转移或备份表的数据文件。 删除表后,对应的 .ibd 文件也会被删除,从而回收磁盘空间。 文件数量增多,文件系统管理较为复杂。 配置独立表空间 独立表空间是 MySQL 5.6 及更高版本的默认设置。可以通过以下方式检查和设置独立表空间的使用情况: 查看当前设置: SHOW VARIABLES LIKE 'innodb_file_per_table'; 启用独立表空间: SET GLOBAL innodb_file_per_table = 1; 在 MySQL 配置文件 my.cnf 中设置: [mysqld] innodb_file_per_table=1 禁用独立表空间(切换回共享表空间模式): SET GLOBAL innodb_file_per_table = 0; 六、InnoDB 逻辑存储结构 共享表空间 (Shared Tablespace): 默认情况下,所有 InnoDB 表的数据和索引都存储在一个或多个共享的表空间文件中。这些文件通常命名为 ibdata1、ibdata2 等,位于 MySQL 的数据目录中。 共享表空间包含了数据字典、数据和索引等的基本结构,是 InnoDB 存储引擎的核心。 独立表空间 (File-Per-Table Tablespace): 在启用独立表空间模式时,每个 InnoDB 表都会有一个独立的 .ibd 文件,该文件包含该表的数据和索引。 独立表空间模式更灵活,允许单独管理每个表的数据文件,进行单表备份和恢复,以及更精确地控制存储空间的使用。 段 (Segments) InnoDB 将数据和索引组织成段 (Segments)。每个段由一个或多个连续的数据页组成。主要的段类型包括数据段、索引段和回滚段等。每个表都有自己的数据段和至少一个索引段。 数据段 (Data Segment):存储表的数据。 索引段 (Index Segment):存储表的索引。 回滚段 (Rollback Segment):用于支持事务的回滚操作。 区 (Areas) 在 InnoDB 存储引擎中,数据和索引管理是基于不同的区域 (Areas) 进行的。每个区域负责管理特定类型的数据页或数据段。主要的区域包括: 缓冲池 (Buffer Pool):用于缓存常用的数据和索引页,提高查询性能。 日志缓冲 (Log Buffer):用于存储事务提交前的修改操作,以提高事务处理速度。 重做日志文件组 (Redo Log Files Group):记录每个事务的操作,用于在数据库崩溃时进行恢复。 页 (Pages) InnoDB 将数据和索引组织成固定大小的数据页,默认大小为 16KB(可以通过配置进行修改)。每个数据页是 InnoDB 存储引擎的基本存储单元。InnoDB 的数据和索引都存储在这些页中,而不是像 MyISAM 引擎那样存储在固定大小的块中。 InnoDB 存储引擎通过逻辑存储结构(表空间、页、段和区)有效地管理数据和索引。这种结构提供了高效的数据访问、事务管理和崩溃恢复能力,使得 InnoDB 成为广泛使用的关系型数据库管理系统的首选存储引擎之一。
发表评论
还没有评论,来说两句吧...