目录
1、写在前面
2、mysql内建其他存储引擎
3、第三方存储引擎
4、存储引擎的选择标准
1、写在前面
mysql> SHOW ENGINES; #查看支持的存储引擎
存储引擎是表级别的概念,在创建表时就可指定表的存储引擎。
mysql> SHOW TABLE STATUS LIKE 'tn_name'\G #显示表状态信息
表状态信息:
Row_format:Dynamic,Fixed,Compressed,Compact
Rows:表中的行行数,采用InnoDB引擎的表是估算值
Avg_row_length:行的平均字节数
Data_length:表的数据量,单位为字节
Max_data_length:表的容量上限,单位为字节
Index_length:索引数据量,单位为字节
Data_free:已分配出去,但未存储数据的存储空间,通常指开始被数据填充,后被删除后腾出的空间
Auto_increment:具有自动属性的字段的下一个增长值
Create_time:表的创建时间
Update_time:数据最近一次的更新时间
Check_time:使用check命令检查表的时间
Collation:排序规则
Checksum:表的校验和
Create_options:创建表时指定的其他选项
Coment:对MyISAM表,存储的是创建表时的comment表选项指定的信息,对InnoDB表来讲,存储对应的表空间信息
2、mysql内建存储引擎
2.1、InnoDB引擎
InoDB特性:
InnoDB引擎是事务型的存储引擎,InnoDB表采用聚簇索引建立,数据与索引存储在一起,按主索引顺序存储为有序文件,通过间隙锁有效防止幻读,支持自适应HASH索引加速读操作,采用MVCC多版本并发控制来支持高并发,实现了四个标准的事务隔离级别,不像MyISAM引擎只支持表级锁,InnoDB表支持行级锁,利用MySQL Enterprise Backup和开源的Percona Xtrabackup工具实现真正的热备份。
采用InnoDB存储引擎的表在文件级别存储的文件:
tb_name.frm:存储表格式
tb_name.ibd:在开启“innodb_file_per_table=ON”后,数据与索引就存储在以此文件中,默认文件的位置存储在frm表存储位置的位置,如果没有开启此变量,那所有的表数据及索引默认都存储在数据目录的“ibdata1”这样的表空间文件中,这是由InnoDB管理的一个黑盒子,由一系列的数据文件组成。
2.2、MyISAM引擎
MyISAM支持全文索引、压缩、空间函数、但不支持行级锁和事务,具有么延迟更新索引键特性,即当指定“DELAY_KEY_WRITE”选项后,每次修改执行完成时,不会立刻将修改的索引数据写入到磁盘,而是先写入内存中的键缓冲区,只有在清理键缓冲区或者关闭表的时候才会将对应的索引块写入到磁盘,可提升写入性能,但在主机崩溃时会造成索引损坏。
缺点:崩溃后不能安全恢复
MyISAM适用场景:数据量较小的表,能够接受手动修复操作
采用MyISAM存储引擎的表在文件级别存储的文件:
tb_name.frm:格式文件
tb_name.MYD:数据文件
tb_name.MYI:索引文件
2.3、ARCHIVE引擎
仅支持INSERT和SELECT,支持很好的压缩功能,支持全表扫描,不支持索引
适用场景:存储日志信息,或按时间序列实现的数据采集运用
2.4、CSV引擎
将数据保存为CSV格式,不支持索引
适用于在不同类型的数据库中交换数据的场景
2.5、BLACKHOLE:
没有存储机制,任何数据都会被丢弃,但是会记录二进制日志
适用于在mysql复制场景作为中继服务器的存储引擎
2.6、Federated引擎
能够访问远程服务器上的数据,类似于代理。在MariaDB中被改进
2.7、Memory引擎:
内存存储引擎,能实现数据的快速查询、修改,支持Hash索引,比MyISAM至少快一个数量级,但也只是支持表级锁,并发写入性能低。适用于需要快速检索数据,通常用于实现临时表。
2.8、MRG引擎
能够把多个MyISAM表合并,本身并不存储数据,但在引入分区功能后,此引擎已被放弃。
2.9、NDB集群引擎
专用于MySQL Cluster集群的存储引擎
3、第三方存储引擎
3.1、OLTP类(On-Line Transaction Processing联机事务处理系统(OLTP)也称为面向交易的处理系统)
XtraDB:InnoDB增强版,对InnoDB引擎做了改进,主要集中在性、可测量性和操作灵活性方面,已经在MariaDB中集成此引擎。
PBXT:社区已不活跃,已不再维护,PBXT 在 MariaDB 的 5.1/5.2/5.3 版本中存在,但从MariaDB 5.5 开始就不再提供 PBXT 存储引擎
TokuDB:是一种大数据存储引擎,存储海量数据有优势,支持分形树索引数据结构,适用于需要大量插入分析型数据的场景
3.2、列式存储引擎(在海量存储时效率会更高)
Infobright:适合数据量在数十TB的场景,不支持压缩
还有InfiniDB、MonetDB、LucidDB这样的列区引擎。
3.3、社区存储引擎
社区存储引擎大多没有或很少在生产环境中使用,这里只是列举一些:
SphinxSE、Aria
Groona:全文索引引擎
QQGraph:支持图,由Open query研发
Spider:支持分片(shard)
VPForMySQL:支持垂直分区
4、存储引擎的选择标准
除非需要用到某些InnoDB不具备条件的特性,并且没有其他办法可以替代,否则都应该优先选择InnoDB引擎。
a)、是否需要事务支持
b)、是否可热备份
c)、崩溃恢复的数据安全
建议:
存储日志型数据,选择MyISAM和ARCHIVE
存储论坛应用,选择InnoDB
订单处理,选择InnoDB