首页 > 编程笔记 > MySQL笔记 阅读:7

MySQL存储引擎有哪些(非常详细)

MySQL 提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。

在 MySQL 中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一张表使用不同的存储引擎。MySQL 支持的存储引擎有 InnoDB、MyISAM、Memory、NDB、Merge、Archive、Federated、CSV、BLACKHOLE 等。

可以使用 SHOW ENGINES 语句查看系统所支持的存储引擎类型,结果如下:
mysql> SHOW ENGINES \G
*************************** 1. row ***************************
     Engine: MEMORY
    Support: YES
    Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
         XA: NO
  Savepoints: NO
*************************** 2. row ***************************
     Engine: MRG_MYISAM
    Support: YES
    Comment: Collection of identical MyISAM tables
Transactions: NO
         XA: NO
  Savepoints: NO
*************************** 3. row ***************************
     Engine: CSV
    Support: YES
    Comment: CSV storage engine
Transactions: NO
         XA: NO
  Savepoints: NO
*************************** 4. row ***************************
     Engine: FEDERATED
    Support: NO
    Comment: Federated MySQL storage engine
Transactions: NULL
         XA: NULL
  Savepoints: NULL
*************************** 5. row ***************************
     Engine: PERFORMANCE_SCHEMA
    Support: YES
    Comment: Performance Schema
Transactions: NO
         XA: NO
  Savepoints: NO
*************************** 6. row ***************************
     Engine: MyISAM
    Support: YES
    Comment: MyISAM storage engine
Transactions: NO
         XA: NO
  Savepoints: NO
*************************** 7. row ***************************
     Engine: InnoDB
    Support: DEFAULT
    Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
         XA: YES
  Savepoints: YES
*************************** 8. row ***************************
     Engine: ndbinfo
    Support: NO
    Comment: MySQL Cluster system information storage engine
Transactions: NULL
         XA: NULL
  Savepoints: NULL
*************************** 9. row ***************************
     Engine: BLACKHOLE
    Support: YES
    Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
         XA: NO
  Savepoints: NO
*************************** 10. row ***************************
     Engine: ARCHIVE
    Support: YES
    Comment: Archive storage engine
Transactions: NO
         XA: NO
  Savepoints: NO
*************************** 11. row ***************************
     Engine: ndbcluster
    Support: NO
    Comment: Clustered, fault-tolerant tables
Transactions: NULL
         XA: NULL
  Savepoints: NULL
Support 列的值表示某种引擎是否能使用:YES 表示可以使用,NO 表示不能使用,DEFAULT 表示该引擎为当前默认存储引擎。

查看当前默认的存储引擎,可以使用下面的语句:
mysql> SHOW VARIABLES LIKE '%storage_engine%';
+---------------------------------+-----------+
| Variable_name                   | Value     |
+---------------------------------+-----------+
| default_storage_engine          | InnoDB    |
| default_tmp_storage_engine      | InnoDB    |
| disabled_storage_engines        |           |
| internal_tmp_mem_storage_engine | TempTable |
+---------------------------------+-----------+
尽管 MySQL 数据库支持多种数据存储引擎,但是不管使用哪种存储引擎,所有的存储数据都被记录到 .frm 文件中,该文件还记录了表的一些属性值。

值得注意的是,不管使用哪种数据存储引擎,都使用了高速缓存,数据库在读取 .frm 文件信息后会将表的信息缓存起来,以提高服务器下次读取数据的速度。

不同的存储引擎都有各自的特点,以适应不同的需求,常用存储引擎的对比情况如下表所示。

表:常用存储引擎的对比情况
特点 InnoDB MyISAM Memory Merge Archive
存储限制 64TB 没有 没有
事务安全 支持        
锁机制 行锁 表锁 表锁 表锁 表锁
B树索引 支持 支持 支持 支持 支持
哈希索引     支持    
全文索引   支持      
集群索引 支持        
数据缓存 支持   支持    
索引缓存 支持 支持 支持 支持 支持
数据可压缩   支持     支持
空间使用 N/A  
内存使用 中等 表锁
批量插入速度 支持
支持外键 支持        


使用哪一种引擎要根据需要灵活选择,一个数据库中的多张表可以使用不同引擎,以满足各种性能和实际需求。使用合适的存储引擎,将会提高整个数据库的性能。

MySQL 数据库在创建表的时候,可以添加默认的存储引擎,示例如下:
create table books(
id int,
name varchar(20) not null
)engine=MyISAM default charset= utf8mb4;

更改表的存储引擎的语法格式如下:
ALTER TABLE <表名> ENGINE=<更改后的存储引擎名>;

【实例】将数据表 books 的存储引擎修改为 InnoDB。
1) 在修改存储引擎之前,先使用 SHOW CREATE TABLE查看表 tb_deptment3 当前的存储引擎,结果如下:
mysql> SHOW CREATE TABLE books \G
*************************** 1. row ***************************
      Table: books
Create Table: CREATE TABLE `books` (
  `id` int DEFAULT NULL,
  `name` varchar(20) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
可以看到,表 books 当前的存储引擎为 NGINE=MyISAM。

2) 接下来修改存储引擎类型,SQL 语句如下:
mysql> ALTER TABLE books ENGINE=InnoDB;

使用 SHOW CREATE TABLE 再次查看表books的存储引擎。
mysql> SHOW CREATE TABLE books \G
*************************** 1. row ***************************
       Table: books
Create Table: create table `books` (
  `id` int DEFAULT NULL,
  `name` varchar(20) NOT NULL
) ENGINE= InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
表 books 的存储引擎变成了“InnoDB”。

相关文章