|
|
1、简介
mysql使用插件式存储引擎,支持第三方存储引擎,数据库的很多特性都有存储引擎决定
存储引擎是表级别的概念也称为表类型,在创建表中可以单独定义,同一个数据库不建议使用多个存储引擎
mysql在5.1及之前的版本默认的存储引擎是MyISAM,现在是InnoDB,最大的区别就是InnoDB支持事务而MyISAM不支持
表类型:
CREATE TABLE ... ENGINE=
2、InnoDB
设计目标:处理大量的短期事务,
数据存储于“表空间(table space)”中:
1)所有InnoDB表的数据和索引放置于同一个表空间中;
表空间文件:datadir定义的目录下
数据文件:ibddata1, ibddata2, ... #1个文件不够用会使用多个文件,但在上级表空间看来属于同一个文件
2)每个表单独使用一个表空间存储表的数据和索引;
innodb_file_per_table=ON #在配置文件中添加这个指令使用该特性
数据文件(存储数据和索引):tbl_name.ibd,
表格式定义:tbl_name.frm
基于MVCC来支持高并发,支持所有的四个隔离级别,默认级别为REPEATABLE READ; 间隙锁防止幻读;
使用聚集索引
支持“自适应hash索引”
锁粒度:行级锁
MariaDB (XtraDB (percona))
MariaDB中虽然仍然叫InnoDB其实是percona的XtraDB是对InnoDB的改进增强版
3)InoDB特性总结
数据存储:表空间
并发:MVCC, 间隙锁
索引:聚集索引、辅助索引
性能:预计操作、自适应hash、插入缓存区
备份:支持热备(xtrabacup)
3、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
SQUENCE
|
|
|