一、InnoDB: 处理大量的短期事务; 数据存储于"表空间(table space)"中; 1、所有InnoDB表的数据和索引放置于同一个表空间中; 表空间文件:datadir定义的目录下 数据文件:ibddata1,ibddata2,... 2、每个表单独使用一个表空间,存储表的数据和索引; innodb_file_per_table=ON 数据文件(存储数据和索引):tbl_name.ibd 表格式定义:tbl_name.frm 基于MVCC(Multi-Version Concurrency Control )来支持高并发,支持所有的四个事务隔离级别,默认级别为REPEATABLE READ;通过间隙锁防止幻读的出现; 使用聚集索引 支持"自适应hash索引" 行级锁 数据存储:表空间 并发:MVCC,间隙锁 索引:聚集索引、辅助索引 性能:预读操作、自适应hash、插入缓存区 备份:支持热备(xtrabackup) MariaDB中虽然也叫InnoDB,但使用的是XtraDB(percona公司提供) 二、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服务器的客户端连接,并将查询传输到远程服务器执行 而后完成数据存储,在MariaDB上的实现叫做FederatedX MariaDB支持的其他存储引擎: OQGraph、SphinxSE、TokuDB、Cassandra、CONNECT、SEQUENCE 四、编译安装MySQL: 五、并发控制:锁 锁策略: 在锁粒度及数据安全性寻求的平衡机制; 每种存储引擎都可以自行实现其锁策略和锁粒度; MySQL在服务器级也实现了锁,表级锁;用户可显示请求; (1) LOCK TABLES tbl_name [[AS] alias] lock_type [, tbl_name [[AS] alias] lock_type] ... lock_type: READ [LOCAL] | [LOW_PRIORITY] WRITE UNLOCK TABLES (2) FLUSH TABLES tb_name[,...] [WITH READ LOCK] (3) SELECT clase [FOR UPDATE] [WITH READ LOCK]