一、存储引擎
1.Mariadb存储引擎
存储引擎就是指表的类型,决定了表在计算机中的存储方式,在MySQl中是一个插入式的存储引擎概念。决定了MySQl数据库中的表可以使用不同的存储方式存储。
2.mysql支持的存储引擎(Mariadb-servver5.5.44)
MariaDB[(none)]> SHOW ENGINES;
说明:
MariaDB 中类似Innodb的存储引擎实际上为XtraDB (percona社区提供) InnoDB的增强改进,但仍然叫做InnoDB
二、Innodb存储引擎
1.Innodb特性概述
(1) 处理大量的短期(小)事务;具有自动崩溃恢复特性
(2) 数据存储于"表空间(tablespace)"中;自行管理的黑盒;其内部组织为多个文件,表现为一个文件
(3) 可直接存储于裸设备中,而无需文件系统支持
(4)基于MVCC来支持高并发,支持所有的四个隔离级别,默认级别为REPEATABLEREAD(可重读功能); 间隙锁防止幻读;
(5)Innodb表使用聚集索引;也支持"自适应hash索引"(无法显示创建,InnoDB内部自行维护)
(6)锁粒度:行级锁(一部分内容)
2.innodb表空间存储方式
(1) 所有InnoDB表的数据和索引放置于同一个表空间中;表空间文件存储于datadir定义的目录下
数据文件(存储数据和索引):ibddata1, ibddata2, ...存满了自动扩张,可限制单个表的物理空间大小
(2) 每个表单独使用一个表空间存储表的数据和索引;才能实现各种高级功能
参数:innodb_file_per_table=ON
数据文件(存储数据和索引):tbl_name.ibd,
表格式定义(每个表多少字段,每个字段的名称等信息):tbl_name.frm
注意:
此方式存储数据当清空表数据,而不会清空表格式;因为数据和文件使用不同的文件分开存储
三、MyISAM存储引擎
1.MyISAM概述
(1)特性
最早的存储引擎,也最成熟。早些服务于数据仓库(较少的插入操作但是较多的读操作的场景),不适用于在线事务处理的应用场景。
支持全文索引(FULLTEXTindex)
支持直接对表数据压缩
支持空间函数(GIS)
不支持事务,且为表级锁(锁粒度粗糙);
崩溃后无法安全恢复,可以手动check恢复,但时间长
注意:
Mariadb对MyISAM做了增强,为Aria存储引擎;其支持崩溃后安全恢复
(2)适用场景
只读(或者写较少)、表较小(可以接受长时间进行修复操作)
2.数据文件存储
每个表有三个文件进行数据的存储
表格式定义文件 |
tbl_name.frm |
数据文件 |
tbl_name.MYD |
索引文件 |
tbl_name.MYI |
行格式:
dynamic变长字段动态行, fixed固定长度的行长短, compressed 压缩后存放, compact紧致的, redundent冗余方式
四、MySQL支持的其它存储引擎
1.CSV:将普通的CSV(字段通过逗号分隔)作为MySQL表使用;
2.MRG_MYISAM:将多个MyISAM表合并成为一个虚拟表;
3.BLACKHOLE:类似于/dev/null,不真正存储任何数据;
4.MEMORY:所有数据都保存于内存中,内存表;支持hash索引;表级锁;一般用于对临时表采取的操作
5.PERFORMANCE_SCHEMA:伪存储引擎;mysql关闭会消失不见
6.ARCHIVE:只支持SELECT和INSERT操作;支持行级锁和专用缓存区;不支持事务;可用于数据仓库,做不可能发生改变,归档保存的不再做修改的历史数据
7.FEDERATED:用于访问其它远程MySQL服务器一个代理,它通过创建一个到远程MySQL服务器的客户端连接,并将查询传输到远程服务器执行,而后完成数据存取;在MariaDB的上实现是FederatedX
8.其他
OQGraph、SphinxSE、TokuDB、Cassandra、CONNECT、SQUENCE