存储引擎的使用
存储引擎
:指表的类型以及表在计算机上的存储方式。
数据库中的各表均被(在创建表时)指定的存储引擎来处理。
服务器可用的引擎依赖于以下因素:
- MySQL的版本
- 服务器在开发时如何被配置
- 启动选项
为了解当前服务器中有哪些存储引擎可用,可使用SHOW ENGINES语句:
mysql> SHOW ENGINES\G
在创建表时,可使用ENGINE选项为CREATE TABLE语句显式指定存储引擎。
CREATE TABLE TABLENAME (NO INT) ENGINE = MyISAM;
如果在创建表时没有显式指定存储引擎,则该表使用当前默认的存储引擎。
默认的存储引擎可在my.ini
配置文件中使用default-storage-engine选项指定。
现有表的存储引擎可使用ALTER TABLE语句来改变:
ALTER TABLE TABLENAME ENGINE = INNODB;
为确定某表所使用的存储引擎,可以使用SHOW CREATE TABLE或SHOW TABLE STATUS语句:
mysql> SHOW CREATE TABLE emp\G;
mysql> SHOW TABLE STATUS LIKE 'emp' \G;
常用存储引擎
mysql的存储引擎有:
InnoDB
[MySQL 5.5或更高版本的默认存储引擎]、MyISAM
[管理非事务性表,提供高速存储和检索,支持全文搜索]、MEMORY
[提供内存中的表,用于快速查找引用和其他相同的数据]、MERGE
[将多个类似的MyISAM表分组为一个表,可以处理非事务性表,默认情况下包括这些表]、EXAMPLE
[可以使用此引擎创建表,但不能存储或获取数据]、ARCHIVE
[用于存储大量数据,不支持索引]、CSV
[在文本文件中以逗号分隔值格式存储数据]、BLACKHOLE
[受要存储的数据,但始终返回空]、FEDERATED
[将数据存储在远程数据库中].
常用存储引擎有:
(1)MyISAM存储引擎
MyISAM存储引擎是MySQL最常用的引擎。
它管理的表具有以下特征:
- 使用三个文件表示每个表:
格式文件 — 存储表结构的定义(mytable.frm)
数据文件 — 存储表行的内容(mytable.MYD)
索引文件 — 存储表上索引(mytable.MYI) - 灵活的AUTO_INCREMENT字段处理
- 可被转换为压缩、只读表来节省空间
优势:占用空间小,处理速度快。 缺点:不支持事务的完整性和并发性。
(2)InnoDB存储引擎
InnoDB存储引擎是MySQL的缺省引擎。
它管理的表具有下列主要特征:
- 每个InnoDB表在数据库目录中以.frm格式文件表示
- InnoDB表空间tablespace被用于存储表的内容
- 提供一组用来记录事务性活动的日志文件
- 用COMMIT(提交)、SAVEPOINT及ROLLBACK(回滚)支持事务处理
- 提供全ACID兼容
- 在MySQL服务器崩溃后提供自动恢复
- 多版本(MVCC)和行级锁定
- 支持外键及引用的完整性,包括级联删除和更新
优势:提供了良好的事务处理、崩溃修复能力和并发控制。 缺点:读写效率较差,占用的数据空间相对较大。
(3)MEMORY存储引擎
使用MEMORY存储引擎的表,其数据存储在内存中,且行的长度固定,这两个特点使得MEMORY存储引擎非常快。
MEMORY存储引擎管理的表具有下列特征:
- 在数据库目录内,每个表均以.frm格式的文件表示。
- 表数据及索引被存储在内存中。
- 表级锁机制。
- 不能包含TEXT或BLOB字段。
MEMORY存储引擎以前被称为HEAP引擎。
选择合适的存储引擎
MyISAM表最适合于大量的数据读而少量数据更新的混合操作。MyISAM表的另一种适用情形是使用压缩的只读表。
如果查询中包含较多的数据更新操作,应使用InnoDB。其行级锁机制和多版本的支持为数据读取和更新的混合操作提供了良好的并发机制。
可使用MEMORY存储引擎来存储非永久需要的数据,或者是能够从基于磁盘的表中重新生成的数据。
bingo~ ✨ 也许幸福取决于你相信谁,而不是你相信什么。