mysql数据库引擎-InnoDB,MyISAM
一、什么是数据库引擎
数据库引擎是数据库管理系统(DBMS)的核心组件之一,用于管理和处理数据库中的数据。它负责数据的存储、检索、更新和删除等操作,以及处理数据库事务、并发控制、数据完整性和安全性等方面的功能。
数据库引擎提供了一种将数据存储在物理设备上的方式,并提供了一套操作和管理这些数据的接口。它定义了数据的组织结构、存储格式、索引方式和查询优化等方面的规则和算法。
二、mysql的数据库引擎有哪些
查询mysql所有的数据库引擎
show engines;
其中的 Support 列表示该存储引擎是否可用, DEFAULT 值代表是当前服务器程序的默认存储引擎。Comment 列是对存储引擎的一个描述。 Transactions 列代表该存储引擎是否支持事务处理。 XA 列代
表着该存储引擎是否支持分布式事务。 Savepoints 代表着该列是否支持部分事务回滚。
-
ndbcluster:ndbcluster引擎是MySQL Cluster的一部分,它提供了高可用性和分布式存储的功能。它适用于需要水平扩展和高可用性的应用场景。
-
FEDERATED:FEDERATED引擎允许在不同的MySQL服务器之间进行数据共享和查询。它适用于需要在多个数据库之间进行数据集成和查询的应用场景。
-
MEMORY:MEMORY引擎将数据存储在内存中,提供了非常快速的读写操作,但数据在服务重启后会丢失。它适用于需要快速读写且数据可丢失的临时数据存储。
-
InnoDB:InnoDB是MySQL的默认存储引擎,它提供了ACID事务支持、行级锁定、外键约束和崩溃恢复等功能。它适用于高并发、大规模的应用场景,并且在处理大量写入操作时表现较好。
-
PERFORMANCE_SCHEMA:PERFORMANCE_SCHEMA引擎是MySQL的性能监控和诊断工具,它提供了丰富的性能指标和监控信息。它适用于性能调优和故障排查等场景。
-
MyISAM:MyISAM是MySQL的另一个常用存储引擎,它不支持事务和行级锁定,但具有较高的读取性能和较小的存储空间需求。它适用于读操作较多、写操作较少的应用场景,如数据仓库和日志分析等。
-
ndbinfo:ndbinfo引擎提供了对MySQL Cluster的元数据和状态信息的访问。它适用于对MySQL Cluster进行监控和管理的场景。
-
MRG_MYISAM:MRG_MYISAM引擎允许将多个MyISAM表合并为一个逻辑表,提供了简单的数据分区和查询优化功能。
-
BLACKHOLE:BLACKHOLE引擎将所有写入操作都丢弃,但可以保留查询操作。它适用于将数据复制到其他服务器或进行数据分析等场景。
-
CSV:CSV引擎将数据存储为逗号分隔的文本文件,适用于简单的数据导入和导出操作。
-
ARCHIVE:ARCHIVE引擎将数据存储为高度压缩的文件,适用于存储大量历史数据和归档数据。
每个数据库引擎都有其适用的场景和特点,根据具体的需求和性能要求选择合适的引擎可以提高数据库的性能和功能。比较常用的是InnoDB和MyISAM,下面将对两者进行比较。
三、InnoDB和MyISAM引擎的区别
InnoDB | MyISAM | |
---|---|---|
构成区别 | 数据文件以及索引文件是分开存储的。数据文件的默认扩展名是.ibd,每个表都有一个对应的数据文件。索引文件的默认扩展名是.frm,用于存储表的结构定义 | 数据文件和索引文件是分开存储的。数据文件的默认扩展名是.MYD,索引文件的默认扩展名是.MYI。此外,还有一个用于存储表的结构定义的.frm文件 |
事务支持 | 支持,可以保证数据的一致性和完整性 | 不支持 |
锁定级别 | 行级,可以更细粒度地控制并发访问,提高并发性能 | 表级,只能锁定整个表,对于高并发的写入操作可能会导致性能瓶颈 |
外键约束 | 支持,可以保证数据的引用完整性,防止出现脏数据 | 不支持 |
崩溃恢复 | 支持,可以在数据库崩溃后自动恢复数据 | 不支持,可能会导致数据丢失 |
性能特点 | 处理大量写入操作时表现较好,适用于高并发、大规模的应用场景 | 处理大量读取操作时表现较好,适用于读操作较多、写操作较少的应用场景 |
总的来说,InnoDB引擎适用于需要事务支持、行级锁定、外键约束和崩溃恢复等功能的应用场景,而MyISAM引擎适用于读操作较多、写操作较少、对性能要求较高的应用场景。
四、设置表的数据库引擎
-
创建表时指定
CREATE TABLE 表名( 建表语句; ) ENGINE = 存储引擎名称;
-
修改表的引擎
ALTER TABLE 表名 ENGINE = 存储引擎名称;
-
查看引擎是否修改成功(该命令会列出数据库所有表的属性)
show table status from 数据库名字;