存储引擎是表级别的概念,每创建一张表都应该指明它的存储引擎,对同一个数据库而言,不建议交叉使用同一个存储引擎。InnoDB:增强版是xtraDB,mariadb默认使用xtraDB
处理大量的短期事务;
数据存储于“表空间(table space)”中;
(1) 所有InnoDB表的数据和索引放置于同一个表空间中;
表空间文件:datadir定义的目录下
数据文件:ibddata1, ibddata2, ...
(2) 每个表单独使用一个表空间存储表的数据和索引;
innodb_file_per_table=ON
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE ‘innodb_file_per%‘;
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | OFF |
+-----------------------+-------+
1 row in set (0.00 sec)
创建t2表:
MariaDB [mydb]> CREATE TABLE t2 (id int, name char(30));
Query OK, 0 rows affected (0.01 sec)
在系统的数据目录下发现了t2表的相关数据
数据文件(存储数据和索引):tbl_name.ibd,
表格式定义:tbl_name.frm
[[email protected] mydb]# ls
db.opt t1.frm t2.frm
[[email protected] mydb]# pwd
/var/lib/mysql/mydb
基于MVCC来支持高并发,支持所有的四个隔离级别,默认级别为REPEATABLE READ; 间隙锁防止幻读;
使用聚集索引
支持“自适应hash索引”
锁粒度:行级锁
数据存储:表空间
并发:MVCC, 间隙锁
索引:聚集索引、辅助索引
性能:预计操作、自适应hash、插入缓存区
备份:支持热备(xtrabacup)MyISAM:
支持全文索引(FULLTEXT index),innodb不支持、压缩、空间函数(GIS); 但不支持事务,且为表级锁,不支持行级锁;
崩溃后无法安全恢复
适用场景:只读(或者写较少)、表较小(可以接受长时间进行修复操作)
Aria:crash-safe
文件:
tbl_name.frm: 表格式定义
tbl_name.MYD: 数据文件
tbl_name.MYI: 索引文件
特性:
加锁和并发:表级锁
修复:手工或自动修复、但可能丢失数据
索引:非聚集索引
延迟更新索引键:
压缩表
行格式:dynamic, fixed, compressed, compact, redundent
原文:http://leeyan.blog.51cto.com/8379003/1709447