1、InnoDB
⑴InnoDB是基于聚簇索引建立的,基于主键索引查询时,性能较好;它的辅助索引中必须包含主键列;因此,若表上的索引较多,为节约空间,主键应尽可能小
⑵InnoDB支持自适应hash索引、事务、行级锁、热备份,采用MVCC支持高并发;
⑶表存储格式:
①将所有innodb表的数据放置同一个表空间中;
表结构定义:tb_name.frm (数据库目录下)
数据和索引:统一的表空间文件中
innodb_data_file_path:表空间文件的文件名称及特性
可使用相对(相对于innodb_data_home_dir而言)或绝对路径,且可定义多个文件;
例:innodb_data_file_path = ibdata1:20G;ibdata2:10G;ibdata3:1G:autoextend
innodb_data_home_dir:表空间文件的存储位置,省略时表示使用数据目录(datadir变量定义的位置);
②每张表使用单独表空间;MariaDB中已默认启用此存储格式
表结构定义:tb_name.frm
数据和索引:tb_name.ibd
SET {GLOBAL|SESSION} innodb_file_per_table = ‘on‘;
优点:迁移或备份数据更精细灵活
缺点:DROP TABLE操作的性能较差
⑷InnoDB缓冲池:buffer pool,由InnoDB维护的内存空间,用于缓存索引及数据;缓冲池如果太大,预热会比较慢。
innodb_buffer_pool_size
⑸查看InnoDB存储引擎的状态:SHOW ENGINE INNODB STATUS;
2、MyISAM
⑴支持全文索引、压缩、空间函数;
不支持事务、行级锁、热备份;
崩溃后无法安全恢复;
支持延迟更新索引键(delayed_key_write):每次修改表后,修改的索引数据不会立即写入磁盘,而是写入内存的键缓冲区,只有当清理键缓冲区或关闭表时才会写入磁盘,这样提高了写性能,但数据库崩溃时,易造成索引损坏。
⑵表存储格式:每张表都有三个文件(位于数据库目录下)
tb_name.frm:表格式
tb_name.MYD:数据
tb_name.MYI:索引
3、其它存储引擎
Memory:早期叫HEAP表,将数据放在内存中,因此访问速度快,但无法持久存储数据,显式支持hash索引。
CSV:将数据存储为文本文件,字段以逗号分隔;不支持索引,常用于数据交换的场景。
Merge:MyISAM的变种,将多个MyISAM表合并表示为一个虚拟表;
Federated:访问其它MySQL服务上数据的代理;MariaDB上用的是FederatedX
Blackhole:没有任何存储机制,所以会丢弃所有的插入的数据;
NDB:Cluster:mysql集群的存储引擎
第三方存储引擎:
OLTP类:
XtraDB:InnoDB的改进版
PBXT:支持ACID和MVCC
TokuDB:支持使用分形树的索引结构,适用存储大数据
面向列的存储的引擎:按列为单位进行存储,适合压缩等,适用于存储大数据
Infobright, InfiniDB, LucidDB
社区引擎:
Aria:MyISAM的改进版,支持崩溃后安全恢复
OQGraph:支持图操作
SphinxSE:为sphinx全文搜索引擎提供了SQL接口;
Spider:可以将数据切分成不同的分区,较透明实现分片功能;
4、存储引擎的选择
选择标准:是否支持事务,热备份,崩溃后恢复等
数据仓库建议使用MyISAM或Aria,在线事务处理建议使用InnoDB
原文:http://9124573.blog.51cto.com/9114573/1750542