文章目录
- 如何选择引擎
- 存储引擎的作用
- 修改引擎方式
- InnoDB
- MyISAM
- MEMORY
- CSV
- ARCHIVE
- 总结
更多相关内容可查看
如何选择引擎
合理选择数据库存储引擎对于系统的性能、数据完整性、维护成本等方面都具有重要影响
- 高并发的事务性应用:选择 InnoDB。
- 以读操作为主的应用:选择 MyISAM。
- 临时数据处理:选择 MEMORY。
- 数据交换和简易存储:选择 CSV。
- 大量归档数据:选择 ARCHIVE。
存储引擎的作用
在数据库管理系统(DBMS)中,存储引擎(Storage Engine)扮演着至关重要的角色。它是处理数据存储、检索、管理和维护的基础组件。存储引擎的作用包括以下几个方面:
数据存储和检索
- 存储方式:存储引擎决定了数据如何在物理存储介质上布局。例如,InnoDB 使用表空间管理数据,而 MyISAM 使用独立的文件存储每个表的数据。
- 索引支持:存储引擎定义了索引的类型和管理方式。例如,InnoDB 支持聚簇索引和非聚簇索引,而 MyISAM 支持全文索引。
事务管理
- 事务支持:存储引擎负责处理事务的开始、提交和回滚操作。事务是对数据库的一组操作,要么全部成功,要么全部失败。只有支持事务的引擎(如 InnoDB)能够确保事务的 ACID 特性(原子性、一致性、隔离性、持久性)。
- 隔离级别:存储引擎还支持不同的事务隔离级别(如 READ COMMITTED、REPEATABLE READ、SERIALIZABLE),影响事务之间的可见性和数据一致性。
锁机制
- 锁类型:存储引擎决定了使用的锁机制,如行级锁、表级锁、页级锁等。InnoDB 支持行级锁,适合高并发的环境,而 MyISAM 使用表级锁,可能会在高并发写入时出现性能瓶颈。
- 锁管理:存储引擎负责管理锁的获取、释放和冲突解决,影响数据库操作的并发性能。
数据完整性
- 约束支持:存储引擎定义了如何实现数据完整性约束,如外键约束、唯一约束等。InnoDB 支持外键约束,确保数据的关联完整性,而 MyISAM 不支持外键约束。
- 崩溃恢复:存储引擎决定了在系统崩溃或故障后的数据恢复机制。例如,InnoDB 提供了崩溃恢复功能,而 MyISAM 可能需要额外的恢复操作。
性能优化
- 查询优化:不同存储引擎优化查询的方式不同。例如,InnoDB 使用聚簇索引来优化主键的查询性能,而 MyISAM 可能在全表扫描和简单查询中表现更好。
- 存储格式:存储引擎可能支持数据压缩和优化,以节省存储空间和提高访问速度。例如,MyISAM 支持表压缩,而 InnoDB 提供了多种行格式来优化存储。
数据备份和恢复
- 备份工具:存储引擎影响可用的备份和恢复工具。例如,InnoDB 支持
mysqldump
和innobackupex
等备份工具,而 MyISAM 主要依赖于myisamchk
和mydumper
等工具。- 恢复机制:存储引擎决定了数据恢复的机制,如 InnoDB 的崩溃恢复和事务日志功能。
特定功能支持
- 全文索引:MyISAM 支持全文索引,适用于全文搜索应用,而 InnoDB 从 MySQL 5.6 版本开始也支持全文索引。
- 数据压缩:ARCHIVE 引擎自动压缩数据,适用于存储大量的归档数据,减少存储空间的使用。
修改引擎方式
方式有很多,例如
- 可以修改配置文件my.ini,在[mysqld]后面添加default-storage-engine=InnoDB,重启服务
- 建表的时候指定
create table mytbl( id int primary key, name varchar(50)
)type=MyISAM;
- 建表后修改
alter table table_name type = InnoDB;
查看修改后成功
show table status from table_name;
InnoDB
有兴趣可以看一些官网资料:https://mysql.net.cn/doc/refman/8.0/en/innodb-benefits.html
InnoDB是当前市面使用最广泛的一种引擎,也是一个默认的存储引擎
概述
InnoDB 是 MySQL 的默认存储引擎,以其支持事务处理、行级锁定和外键约束而闻名。它适用于需要高可靠性和高并发的场景。
特点
- 事务支持:支持 ACID(原子性、一致性、隔离性、持久性)事务。
- 行级锁定:减少了锁争用,提高了并发性能。
- 外键支持:能够维护数据的完整性。
- 崩溃恢复:通过重做日志和撤销日志,能够在系统崩溃后恢复数据。
- 自适应哈希索引:提升查询性能。
实战案例
- 实战案例 1: 电商平台 如京东或淘宝,使用 InnoDB 来管理用户订单、支付和库存。这些操作需要事务支持和高并发处理能力,InnoDB 的行级锁定和事务机制能够有效处理这些需求。
- 实战案例 2: 银行系统 应用场景:账户交易处理 描述:银行应用中,账户余额的增减需要事务处理,以防止数据丢失或不一致。InnoDB 的行级锁和事务支持确保了操作的原子性和数据的完整性。
- 实战案例 3: 社交媒体平台 应用场景:用户帖子和评论 描述:社交平台如 Facebook 使用 InnoDB 存储用户帖子和评论。InnoDB 支持高并发的读写操作,适合处理大量的用户互动和实时更新。
MyISAM
概述
MyISAM 是 MySQL 的早期默认存储引擎,以其简单和高效的性能而著称,但不支持事务处理和外键约束。
特点
- 表级锁定:适合读操作远多于写操作的场景。
- 全文索引:支持全文搜索,适合需要文本检索的应用。
- 压缩表:支持表压缩以节省存储空间。
- 事务不支持:不支持 ACID 事务,不能提供数据一致性保证。
实战案例
-
实战案例 1: 网站访问日志 应用场景:日志记录和分析 描述:网站访问日志数据主要用于分析和查询,MyISAM 的全文索引功能可以高效地搜索特定的访问记录和日志内容。
-
实战案例 2: 内容管理系统 应用场景:文章和评论管理 描述:在一个内容管理系统(如博客平台)中,MyISAM 适合用于存储大量的文章和评论。其简单的表结构和良好的读性能非常适合这种主要以读为主的场景。
-
实战案例 3: 论坛系统 应用场景:帖子和回复 描述:论坛系统中,MyISAM 用于存储论坛帖子和回复。尽管写操作较少,但由于其简单的锁机制,MyISAM 能够提供较快的读取速度,适合低并发的写操作环境。
MEMORY
概述
MEMORY 引擎(也称为 HEAP 引擎)将所有数据存储在内存中,适用于需要快速访问数据的场景,但数据在服务器重启后会丢失。
特点
- 高速存取:由于数据存储在内存中,读写速度非常快。
- 临时存储:适合用于临时数据存储,如会话数据和临时表。
- 数据丢失:服务器重启后数据会丢失,适用于不需要持久性的场景。
实战案例
- 实战案例 1: 实时会话存储 应用场景:用户会话数据 描述:在线应用如即时聊天系统使用 MEMORY 引擎存储会话数据,以确保快速访问和处理。由于会话数据是临时的,不需要持久化存储。
- 实战案例 2: 临时数据计算 应用场景:中间计算结果 描述:在数据处理过程中,临时计算结果(如数据聚合)存储在 MEMORY 表中,可以加速计算和分析过程,因为数据存储在内存中,读写速度极快。
- 实战案例 3: 缓存系统 应用场景:缓存热点数据 描述:用于缓存热点数据(如热门商品信息)可以提高访问速度,减少数据库负担。MEMORY 引擎通过高速的内存存储实现快速数据访问。
CSV
概述
CSV 引擎将数据存储在逗号分隔值(CSV)格式的文本文件中,主要用于导出和导入数据,不适合高性能的读写操作。
特点
- 简单格式:数据以 CSV 格式存储,可以方便地与其他应用程序进行数据交换。
- 不支持索引:由于数据是以文本文件存储,没有索引,查询性能较差。
- 只读性:对于大数据量的操作效率不高。
实战案例
- 实战案例 1: 数据迁移 应用场景:从旧系统迁移数据 描述:将旧系统中的数据导出为 CSV 文件,然后导入到新系统中。CSV 格式简单易用,方便在不同系统之间进行数据迁移。
- 实战案例 2: 数据备份 应用场景:生成数据备份文件 描述:使用 CSV 引擎将数据导出为 CSV 文件,以便进行数据备份或创建数据的快照。适合处理数据导出需求,但不适合频繁操作。
- 实战案例 3: 简单数据分析 应用场景:数据分析和共享 描述:用于从数据库中导出简单的数据集(如销售数据),以便在 Excel 或其他数据分析工具中进行进一步分析。
ARCHIVE
概述
ARCHIVE 引擎用于存储大量的归档数据,主要目的是为了节省空间。它适用于仅需要进行数据存储和偶尔读取的场景。
特点
- 数据压缩:存储的数据经过压缩,能够节省磁盘空间。
- 不支持索引:无法进行高效的检索,主要用于存储大量的归档数据。
- 写性能优越:适合插入大量数据,但不适合频繁更新或删除数据。
实战案例
- 实战案例 1: 日志归档 应用场景:存储历史日志数据 描述:日志管理系统将历史日志存储在 ARCHIVE 表中,以节省空间。由于这些日志不常修改,ARCHIVE 的压缩功能非常适合长期存储。
- 实战案例 2: 归档处理 应用场景:归档过期数据 描述:在数据仓库中,使用 ARCHIVE 引擎存储长期不需要频繁访问的数据,如旧的业务记录,以节省存储空间并降低存储成本。
- 实战案例 3: 备份数据 应用场景:数据备份存储 描述:备份过期或不活跃的数据。ARCHIVE 引擎的压缩特性能够有效节省存储空间,适用于大规模的数据备份任务。
总结
说句实话一般用不上,所以大体有个概念就行,基本上用innoDB较多,更何况目前形势华为数据库,Oracle等等都已经在企业流行