第七章 表类型(存储引擎)的选择
MySQL支持的储存引擎
MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED 等,其中 InnoDB 和 BDB 提供事务安全表,其他存储引擎都是非事务安全表。
修改表的储存引擎
-
在创建新表的时候,可以通过增加 ENGINE 关键字设置新建表的存储引擎:
CREATE TABLE ai (
i bigint(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (i)
) ENGINE=MyISAM DEFAULT CHARSET=gbk; -
使用ALTER TABLE 语句:
alter table ai engine = innodb;
储存引擎的特性对比
四种常用储存引擎的介绍
MyISAM
- 不支持事务、也不支持外键
- 优势:访问速度快
- 支持3中不同的储存格式:静态表;动态表;压缩表。其中静态表要注意空格问题。
应用场景:应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高
InnoDB
- 具有提交、回滚和崩溃恢复能力的事务安全
- 对比MyISAM,该引擎处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
InnoDB的特点
1.自动增长列
该列必须为索引,如果是组合索引,也必须是组合索引的第一列。
该列可以手工插入,但是插入的值如果是空或者 0,则实际插入的将是自动增长后的值。
可以通过“ALTER TABLE *** AUTO_INCREMENT = n;”语句强制设置自动增长列的初识值,默认从 1 开始。数据库重启后,该值会消失
2.外键约束
在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。
两种储存方式:
- 共享表空间存储
- 多表空间存储
应用场景:应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询以外,还包括很多的更新、删除操作。
MEMORY
- 使用存在内存中的内容来创建表
- 每个 MEMORY 表只实际对应一个磁盘文件
- 访问速度快
- 一旦数据库服务关闭,表中的数据就会丢失掉
应用场景:主要用在那些内容变化不频繁的代码表,或者作为统计操作的中间结果表,便于高效地对中间结果进行分析并得到最终的统计结果
MERGE
- 是一组 MyISAM 表的组合,,这些 MyISAM 表必须结构完全相同
- MERGE表本身并没有数据
- 可以对 MERGE 表进行 DROP 操作,这个操作只是删除 MERGE 的定义,对内部的表没有任何的影响
应用场景:优点在于可以突破对单个 MyISAM 表大小的限制,并且通过将不同的表分布在多个磁盘上。用于数据仓储等VLDB环境。