MySQL学习笔记(6)--存储引擎
可以通过show engines\g 来查看当前数据库服务器的存储引擎。
1.使用方式
- 数据库中的各表均被(在创建时)指定的存储引擎来处理。
- 服务器可用的引擎依赖一下因素:
- mysql的版本
- 服务器开发时如何被配置
- 启动选项
2.常用存储引擎
1MyISAM存储引擎(不支持事务)
- MyISAM存储引擎时MySql最常用的引擎
- 管理表特征:
- 使用三个文件表示每个表
- 格式文件 — 存储表结构的定义(mytable.frm)
- 数据文件 — 存储表行的内容(mytable.MYD)
- 引擎文件 — 存储表上引擎(mytable.MYI)
- 灵活的AUTO_INCREMENT字段处理
- 可被转换为存储,只读表来节省空间
- 使用三个文件表示每个表
执行效率高,因为不支持事务。
2InnoDB存储引擎(支持事务)
- InnoDB存储引擎是MYSQL的缺省引擎
- 管理表特征:
- 每个InnoDB表在数据库目录中以.frm格式文件表示
- InnoDB表空间tablespace被用于存储表的内容
- 提供一组用来记录事务性活动的日志文件
- 用COMMIT(提交),SAVEPOINT及ROLLBACK(回滚)支持事务处理
- 提供全ACID兼容
- 在MYSQL服务器崩溃后提供自动恢复
- 多版本(MVCC)和行级锁定
- 支持外键及引用的完整性,包括级联删除和更新。
执行效率相对底,因为需要支持事务。
3MEMORY存储引擎
- 使用MEMORY存储引擎的表,其数据存储在内存中,且行的长度固定,这两个特点使得MEMORY存储引擎执行效率非常快
- 管理表特征:
- 在数据库目录内,每个表均以.frm格式的文件表示
- 表数据以及索引存储在内存中
- 表级锁机制
- 不包含TEXT和BLOB字段
- MEMORY存储引擎以前被称为HEAP引擎。
执行效率最快(当前三个数据库存储引擎),但是数据无法持久化。
4选择合适的存储引擎
- 当创建表时,根据表的应用场景选择合适的存储引擎
- MYISAM表最适合大量的数据读取,少量的数据更新的混合操作。另一个合适的情形是使用压缩的只读表
- 表中包含较多的更新数据操作,应使用InnoDB引擎。其行级锁机制和多版本的支持为数据读取和更新的混合操作提供了良好的并发机制。
- 可使用MEMORY存储引擎来存储非永久需要的数据,或能够从基于磁盘的表中重新生成数据。