Chapter 15 Alternative Storage Engines 替代存储引擎
15.1 Setting the Storage Engine
15.2 The MyISAM Storage Engine [+/-]
15.3 The MEMORY Storage Engine
15.4 The CSV Storage Engine [+/-]
15.5 The ARCHIVE Storage Engine
15.6 The BLACKHOLE Storage Engine
15.7 The MERGE Storage Engine [+/-]
15.8 The FEDERATED Storage Engine [+/-]
15.9 The EXAMPLE Storage Engine
15.10 Other Storage Engines
15.11 Overview of MySQL Storage Engine Architecture [+/-]
存储引擎是MySQL 组件处理SQL操作用于不同类型的表,InnoDB 是默认的最通用的存储引擎,
Oracle 推荐使用它除非有特使的用途(The CREATE TABLE statement in MySQL 5.6 creates InnoDB tables by default.)
MySQL 服务器使用一个可插拔的存储引擎结构,使存储引擎被加载和卸载从运行中的MySQL 服务器。
要确定你的服务器支持存储引擎,请使用SHOW ENGINES 语句。 在支持的列中的值指示引擎是否可用。
本章涵盖了专用的MySQL 存储引擎的使用案例,它不包括默认的InnoDB 存储引擎或者NDB 存储引擎。
InnoDB 存储引擎,MySQL cluster NDB 7.3 和MySQL Cluster NDB 7.4 ,对于高级用户,本章还包含一个描述的可插拔的存储引擎结构。
MySQL 5.6 Supported Storage Engines
InnoDB : MySQL 5.6的默认的存储引擎, InnoDB 是事务安全(ACID 标准)存储引擎,用于MySQL 有commit,rollback,和crash-recovery 能力
来保护数据。InnoDB 行级锁(没有增加到粗粒度的锁)和Oracle-style 一致非锁定读增加多用户并发和性能。
InnoDB 存储用户数据 在clustered indexes 来减少I/O 用于常用的查询基于主键的。为了维护数据的完整性,
InnoDB 也支持外键。
MyISAM : 这种类型的表有小的足迹。表级锁限制了读写的负载性能, 因此它通常用于read-only 或者读多的workloads 在Web和数据仓库配置。
Memory: 存储所有的数据在RAM中,用于快速访问,需要快速的查询非关键数据。
这种引擎原先被称为 HEAP 引擎。 它使用的情况是 降低; InnoDB 它的buffer pool 内存区域提供了一个通用的和 持久的方式保持大部分数据或者
所有的数据在内存里,NDBCLUSTER 提供快速的键值查询大量的分布式数据。
CSV: 它的表示真正的文件文件用逗号分隔
15.1 Setting the Storage Engine 设置存储引擎:
当你创建一个新表,你需要制定存储引擎 通过增加一个ENGINE table 选项:
-- ENGINE=INNODB not needed unless you have set a different
-- default storage engine.
CREATE TABLE t1 (i INT) ENGINE = INNODB;
-- Simple table definitions can be switched from one to another.
CREATE TABLE t2 (i INT) ENGINE = CSV;
CREATE TABLE t3 (i INT) ENGINE = MEMORY;
当你省略引擎时,默认的存储引擎被使用。默认的存储引擎在MySQL 5.6 里,你可以通过使用 --default-storage-engine来指定
default-storage-engine=INNODB
你可以设置默认的存储引擎用于当前的会话通过设置default_storage_engine :
SET default_storage_engine=NDBCLUSTER;
在MySQL 5.6.3,存储引擎用于TEMPORARY 表 ,通过CREATE TEMPORARY TABLE 可以单独设置通过设置default_tmp_storage_engine,
要么在启动的时候,在Mysql 5.6.3 之前,default_storage_engine 设置存储引擎用于永久和临时的表。
要转换一个表从一个引擎到另一个,使用ALTER TABLE语句 来使用一个新的引擎:
ALTER TABLE t ENGINE = InnoDB;
如果你想使用存储引擎,没有编译的 或者编译了 但是无效的,MySQL 代替创建一个使用默认存储引擎的表。
比如,在复制阶段, 可能 你的master server 使用InnoDB 表用于最大安全,
但是slave servers 使用非正常的存储引擎用于加速持久性或者并发。
默认情况下, 当创建表或者alter table 不能使用默认的存储引擎时会给出警告。
为了防止混淆,如果需要的引擎是不可用的,使用 NO_ENGINE_SUBSTITUTION SQL 模式
对于新表,MySQL 会创建一个.frm 文件来保存表和列的定义。该表的index和data 可能存储在一个或者多个文件,
依赖存储的引擎。server 创建.frm文件在存储引擎层面上