表类型
CREATE TABLE ... ENGINE=
常见的存储引擎:
InnoDB:
处理大量的短期事务; 数据存储于“表空间(table space)”中: (1)可以将所有InnoDB表的数据放置于同一个表空间中; 表空间文件:datadir定义的目录下: 数据文件(存储数据和索引):ibddata1, ibddata2, ... (2)也可以每个表单独使用一个表空间存储表的数据和索引; innodb_file_per_table=ON 数据文件(存储数据和索引):tbl_name.ibd, 表格式定义:tbl.frm 基于MVCC来支持高并发,支持所有的四个隔离级别,默认级别为REPEATABLE READ;间隙锁防止幻读 InnoDB使用聚集索引 支持“自适应hash索引” 锁粒度:行级锁 MariaDB(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, redundent
其他存储引擎:
CSV:将普通的CSV(字段通过逗号分隔)作为Mysql表使用; MRG_MYISAM:将多个MyISAM表合并成为一个虚拟表; BLACKHOLE: 类似于/dev/null,不真正存储任何数据; MEMORY:所有数据都保存于内存中,内存表;支持hash索引;表级锁; 临时表 PERFORMANCE_SCHEMA:伪存储引擎; ARCHIVE:专用于做归档的存储引擎,只支持SELECT和INSERT操作;支持行级锁和专用缓冲区,不支持事务; FEDERATED:将自己扮演成mysql客户端,从而连到其他mysql服务器上,所做的查询操作都自动发给另一个服务器,获取数据后再返回 用于访问其他远程MYSQL服务器的一个代理,它通过创建一个到远程mysql服务器的客户端连接,并将查询传输到远程服务器执行,而后完成数据存取; 在MariaDB上的实现是FederatedX
MariadDB支持的其他存储引擎:
OQGraph SphinxSE TokuDB Cassandra CONNET SQUENCE