Skip to content

Latest commit

 

History

History
196 lines (164 loc) · 7.18 KB

2-MySql存储引擎.md

File metadata and controls

196 lines (164 loc) · 7.18 KB

MySQL存储引擎

存储引擎是MySQL的组件,用于处理不同类型表的SQL操作。 InnoDB 是默认的存储引擎,也是oracle公司首推的通用存储引擎,除非你需要处理特定的案例的时候则可以选择其他存储引擎。 create table 语句默认使用InnoDB存储引擎。关于InnoDB存储引擎的更多细节介绍可以参考:https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html

MySQL使用可插拔性的存储引擎架构,以便可以在运行中的MySQL服务中装载或者卸载指定的存储引擎。

SHOW ENGINES 语句可以查看你当前的MySQL服务支持哪些存储引擎。

MySQL 8.0 支持的存储引擎

  • InnoDB: 默认的存储引擎;InnoDB是一个事务安全的存储引擎,支持事务,拥有commit、rollback、崩溃恢复等机制保障用户数据。InnoDB行级锁和oracle风格的行读取无锁提升了读写性能。InnoDB将用户数据存储在聚集索引中,来减少基于主键的通用查询I/O开销。为了维护数据集成,InnoDB也支持FOREIGN KEY外键引用。

  • MyISAM:这类表占空间较少。表级锁 限制了读写性能,所以常用来建设只读、或者大部分情况下都是读居多的表。

  • Memory:将所有的数据存储在RAM,主要用于在需要快速访问得到快速响应的环境中。该引擎以前也被称作HEAP引擎。但是这个引擎的使用场景已经越来越少了。InnoDB和它的缓冲池内存

  • CSV: 该引擎的表是真正的文本文件,数据以逗号,分隔开。CSV引擎的表可以让你以CSV格式进行数据的导入、转储。因为CSV文件没有索引,所以通常情况在做一些正常操作时是以InnoDB存储的,只是在导入、导出时使用CSV。

  • 其他的存储引擎,略。

各存储引擎的特性

你不需要受限于政客数据库都是用同一种数据库,可以针对单独的表使用不同的存储引擎。

例如,大都数情况下表都是InnoDB存储引擎的,有一个表使用的时CSV存储引擎,用于导出数据使用,一些表使用的是MEMORY存储引擎用于临时工作空间。

下表列出了各个存储引擎的相关特性,根据这些特性,可以根据自身的业务表选择合适的存储引擎。

Feature MyISAM Memory InnoDB Archive NDB
B-tree indexes Yes Yes Yes No No
Backup/point-in-time recovery (note 1) Yes Yes Yes Yes Yes
Cluster database support No No No No Yes
Clustered indexes No No Yes No No
Compressed data Yes (note 2) No Yes Yes No
Data caches No N/A Yes No Yes
Encrypted data Yes (note 3) Yes (note 3) Yes (note 4) Yes (note 3) Yes (note 3)
Foreign key support No No Yes No Yes (note 5)
Full-text search indexes Yes No Yes (note 6) No No
Geospatial data type support Yes No Yes Yes Yes
Geospatial indexing support Yes No Yes (note 7) No No
Hash indexes No Yes No (note 8) No Yes
Index caches Yes N/A Yes No Yes
Locking granularity Table Table Row Row Row
MVCC No No Yes No No
Replication support (note 1) Yes Limited (note 9) Yes Yes Yes
Storage limits 256TB RAM 64TB None 384EB
T-tree indexes No No No No Yes
Transactions No No Yes No Yes
Update statistics for data dictionary Yes Yes Yes Yes Yes

设置存储引擎

在创建一张新表时,你可以通过添加ENGINE操作在CREATE TABLE语句中来指定表的存储引擎。

## 设置InnoDB存储引擎
create table t1(i int ) engine = INNODB;
CREATE TABLE t2 (i INT) ENGINE = CSV;
CREATE TABLE t3 (i INT) ENGINE = MEMORY;

如果你忽略了ENGINE操作,就会使用默认的存储引擎。MySQL8.0中默认使用的是InnoDB。你也可以通过在配置文件my.ini或者my.conf中指定default-storage-engine=INNODB来修改默认的存储引擎。

你也可以通过设置default_storage_engine变量来指定当前会话的默认存储引擎:

set default_storage_engine = NDBCLUSTER;

修改表的存储引擎,可以使用ALTER TABLE语句:

ALTER TABLE t engine = INNODB;
  • 存储引擎特点介绍 空间已经提供了一个通用、稳定的方式以保证大都数、或者全部数据在内存中了,而且NDBCLUSTER为分布式数据集提供了非常快的 key-value 查找功能。