一、存储引擎概述
- 数据库的各表在创建时均被指定的存储引擎来处理,存储引擎最终作用于表 ,而不是数据库
- Oracle中不叫存储引擎,有对应的机制,但没有特殊的名字,一般认为“表的存储方式”
- 在创建表时,可使用ENGINE选项为CREATE TABLE语句显式指定存储引擎
CREATE TABLE TABLENAME (NO INT) ENGINE = MyISAM;
- 如果在创建表时没有显式指定存储引擎,则该表使用当前默认的存储引擎,MySQL默认存储引擎为InnoDB,默认的存储引擎可在my.ini配置文件中使用default-storage-engine选项指定
- 现有表的存储引擎可使用ALTER TABLE语句来改变
ALTER TABLE TABLENAME ENGINE = INNODB;
二、MySQL常用存储引擎
1. MyISAM(节省空间)
1.1 特点
- 使用三个文件表示每个表
存储表结构:xxx.frm 格式文件
存储表行的内容:xxx.MYD 数据文件
存储表上的索引:xxx.MYI 索引文件 - 灵活的auto_increment字段处理
- 可被转换为压缩表节省空间,可被转换为只读表提高检索效率
- 不支持事务
2. InnoDB(默认引擎,安全)
2.1 特点
- 存储表结构:xxx.frm文件
存储表行内容与索引:xxx.ibd文件 - 数据存储在tablespace表空间(逻辑概念)中,无法被压缩、转换成只读
- 支持事务:
提供一组用来记录事务性活动的日志文件
用commit、savepoint及rollback支持事务处理
提供全ACID兼容 - 在MySQL服务器崩溃后提供自动恢复
- 多版本(MVCC)和行级锁定
- 支持外键及引用的完整性,包括级联删除和更新
3. MEMORY(查询快)
- MEMORY存储引擎以前被称为HEAP引擎
- 使用MEMORY存储引擎的表,其数据存储在内存中,且行的长度固定,这两个特点使得MEMORY存储引擎非常快
3.1 特点
- 查询速度最快(因为数据存储在内存中,且行的长度固定)
- 表的结构存储在xxx.frm文件中
- 表数据及索引被存储在内存中
- 支持表级锁机制
- 不能包含TEXT(CLOB)或BLOB字段
- 不支持事务
- 数据容易丢失(断电),因为所有数据和索引都是存储在内存当中
三、存储引擎的选择
- MyISAM 适合于大量的数据读而少量数据更新的混合操作;另一种适用情形是使用压缩的只读表
- InnoDB 适合较多的数据更新操作,行级锁机制和多版本的支持为数据读取和更新的混合操作提供了良好的并发机制
- 可使用MEMORY存储引擎来存储非永久需要的数据,或者是能够从基于磁盘的表中重新生成的数据