MySQL存储引擎
表类型:
CREATE TABLE ... ENGINE = []
InnoDB:
- 处理大量的短期事务;
- 数据存储于"表空间(table space)"钟;
- 所有InnoDB表的数据和索引放置于同意个表空间中;表空间文件;
- datadir定义中
- 数据文件:idbdata1,idbdata2, ...
- 每个表单独使用一个表空间存储表的数据和索引;
- innodb_file_per_table=ON
- 数据文件(存储数据和索引): tb1_name.idb
- 所有InnoDB表的数据和索引放置于同意个表空间中;表空间文件;
- 基于MVCC来支持高并发,支持所有的四个隔离级别,默认级别为REPEATABLE READ;间隙放置幻读;
- 使用聚集索引;
- 支持"自适应hash索引";
- 行级锁
- MariaDB中的InnoDB实际是是XtraDB,由percona公司维护;
- 特性:
- 数据存储: 表空间
- 并发: MVCC,间隙锁
- 索引: 聚集缩影, 辅助索引
- 性能: 预计操作,自适应hash,插入缓存区
- 备份: 支持度热备(xtrabackup)
MyISAM:
- 支持全文索引(FULLTEXT index),压缩,空间函数(GIS);但不支持事务,且为表级锁;
- 崩溃后无法安全恢复 --> Aria: crash-safe
- 适用场景: 只读(过着写较少), 表较小(可以接受长时间进行修复操作)
- 文件:
- tbl_name.frm: 表格式定义
- tbl_name.MYD: 数据文件
- tbl_name.MYI: 索引文件
- 特性:
- 加锁和并发: 表级锁
- 修复: 手工或自动修复,但可能丢失数据
- 索引: 非聚集索引
- 延迟更新索引键
- 压缩表
行格式: dynamic, fixed, compressed, compact,redundant
其他的存储引擎:
- CSV:将普通的CSV文件爱你作为MySQL表使用;
- MRG_MYISAM:将多个MyISAM表合并成为一个虚拟表;
- BLAKHOLE: 类似于/dev/null,不真正存储任何数据
- MEMORY: 所有数据都保存于内存中,内存表: 支持HASH索引,表级锁;
- 临时表
- PERFORMNCE_SCHEMA:伪存储引擎;
- ARCHIVE: 仅支持SELECT和INSERT操作;支持行级锁和专用缓存区;
- FEDERATED: 用于访问其他远程mysql服务器一个代理,它通过创建一个到远程mysql服务器的客户端而完成数据存储,在MariaDB的上实现是FederatedX
MariaDB支持的其他存储引擎:
- OQGraph
- SphinxSE
- TokuDB
- Cassandra
- CONNECT
- SQUENCE
并发控制:
- 锁:
- 读锁: 共享锁
- 写锁: 独占锁
- 锁粒度:
- 表级锁
- 行级锁
- 锁策略: 在锁粒度及数据安全性寻求的平衡机制;
- 每种存储引擎都可以自行实现其锁策略和锁粒度;
- MySQL在服务器级也实现了锁,表级锁;用户可显示请求