MySQL 存储引擎
MySQL 常用存储引擎
1、存储引擎概念
简单来说,MySQL中的存储引擎是一种用于数据存储和检索的技术。它决定了如何在数据库中存储、处理和检索数据。
2、MySQL 存储引擎
Mysql中的存储引擎是针对表来进行操作的,同一个数据库中,每个表都可以使用不同的存储引擎。MySQL支持多种不同的存储引擎,不同的存储引擎提供了不同的数据处理功能,最常见的存储引擎包括:
InnoDB:MySQL5.5后默认使用的存储引擎,支持事务处理、行级锁定和外键,其设计目标是最大限度地减少磁盘I/O。
MyISAM: 早期MySQL版本(mysql5.5之前)的默认存储引擎,不支持事务处理或行级锁定,但在读取密集型操作(少量写入或更新)中表现良好。
MEMORY: 这个引擎使用内存来存储数据,适用于快速访问的临时数据。重启会丢失数据。
3、MySQL 数据存放
在MySQL中,数据是按照数据库和表的存储引擎在文件系统中以文件的形式存储。
数据库: 每个数据库都对应文件系统上的一个目录。这个目录通常位于MySQL的数据目录下,每个数据库的名字就是其对应目录的名字。
数据表: 每个数据库的目录下,存储着该数据库中所有表的相关文件。这些文件的类型和数量取决于表使用的存储引擎。
4、InnoDB引擎的表
MySQL5.5以后使用的默认存储引擎就是innodb。在MySQL的默认配置中,采用共享表空间模式时,所有使用InnoDB存储引擎的表会将其数据和索引集中存储在一个名为ibdata1的共享文件中。
然而,MySQL也支持“文件每表”模式,在这种模式下,每个InnoDB表都使用各自的.ibd文件来独立存储其数据和索引。这种设置允许对每个表的存储进行更细粒度的管理。
共享表空间模式
共享表空间模式是MySQL的InnoDB存储引擎的一种数据存储方式。在这种模式下,所有使用InnoDB存储引擎的表会将其数据和索引存储在一个共享的表空间中。这个共享表空间通常由一个名为ibdata1的文件表示。
1、存储方式: 在共享表空间模式下,MySQL中所有InnoDB表的数据和索引不是按数据库分别存储在各自的目录中,而是集中存储在单个共享表空间文件中。这意味着不同数据库中的InnoDB表共享同一文件(如ibdata1)来存储它们的数据和索引。
2、文件大小: 由于所有InnoDB表的数据和索引都存储在同一个文件中,这个文件可能随着时间和数据量的增加而变得非常大。
3、备份和恢复: 共享表空间模式简化了对整个MySQL实例的备份和恢复过程,因为所有数据都集中在一个地方。然而,对单个表的备份和恢复变得更加复杂,因为每个表的数据与其他表的数据在同一个文件中混合存储。
文件每表模式
文件每表模式是让每个InnoDB表都使用自己的独立表空间文件(通常是.ibd文件),此时相关文件是存储在各自数据库目录中的.
修改模式方法
通过 mysqld的 innodb_file_per_table配置选项可以设置为文件每表模式
# 只会影响之后创建的表。已经存在的表仍将使用它们当前的存储方式,除非重新创建或迁移这些表。
[mysqld]
innodb_file_per_table=1
5、MyISAM引擎的表:
MySQL5.5版本以前使用的是myisam作为默认存储引擎,每个表会有三个文件:.frm(存储表结构)、.MYD(存储数据)、.MYI(存储索引)。
6、修改默认存储引擎
如果要修改默认的存储引擎,可以通过 mysqld的default-storage-engine 进行修改
[mysqld]
default-storage-engine=引擎名称
查看表使用的存储引擎
通过查看表的属性可以查看表使用的存储引擎类型:
SHOW TABLE STATUS LIKE 'tb_name';
# 表名这儿不能加单双引号,因为单引号和双引号在SQL中用于界定字符串字面量。 数据库名和表名这些属于标识符。
show create table tb_NAME\G
修改表的存储引擎
ALTER TABLE tablename ENGINE = 新的存储引擎;