5 BLACKHOLE - 黑洞引擎
支持事务,而且支持mvcc的行级锁,写入这种引擎表中的任何数据都会消失,主要用于做日志记录或同步归档的中继存储,该存储引擎除非有特别目的,否则不适合使用。
适用场景1
使用BLACKHOLE存储引擎的表不存储任何数据,但如果mysql启用了二进制日志,SQL语句被写入日志(并被复制到从服务器)。这样使用BLACKHOLE存储引擎的mysqld可以作为主从复制中的中继重复器或在其上面添加过滤器机制。例如,假设你的应用需要从服务器侧的过滤规则,但传输所有二进制日志数据到从服务器会导致较大的网络流量。在这种情况下,在主服务器主机上建立一个伪从服务器进程。
场景2:
如果配置一主多从的话,多个从服务器会在主服务器上分别开启自己相对应的线程,执行binlogdump命令而且多个此类进程并不是共享的。为了避免因多个从服务器同时请求同样的事件而导致主机资源耗尽,可以单独建立一个伪的从服务器或者叫分发服务器。
ARCHIVE
区别于InnoDB和MyISAM,ARCHIVE提供压缩功能,拥有高效地插入。
但不支持索引,所以查询性能较差。
支持insert、replace和select操作,不支持update和delete。
适用场景
数据归档
压缩比非常高,存储空间大概是innodb的10-15分之一,所以存储历史数据非常适合,由于不支持索引也不能缓存索引和数据,不适合作为并发访问表。
日志表
因为高压缩和快速插入的特点。
但前提是不经常对该表进行查询。
PERFORMANCE_SCHEMA:
该引擎主要用于收集数据库服务器性能参数。这种引擎提供以下功能:提供进程等待的详细信息,包括锁、互斥变量、文件信息;保存历史的事件汇总信息,为提供MySQL服务器性能做出详细的判断;对于新增和删除监控事件点都非常容易,并可以随意改变mysql服务器的监控周期,例如(CYCLE、MICROSECOND)。 MySQL用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。
场景: DBA能够较明细得了解性能降低可能是由于哪些瓶颈。
Merge
Merge允许将一组使用MyISAM存储引擎的并且表结构相同(即每张表的字段顺序、字段名称、字段类型、索引定义的顺序及其定义的方式必须相同)的数据表合并为一个表,方便了数据的查询。
场景:MySQL中没有物化视图,视图的效率极低,故数据仓库中数据量较大的每天、每周或者每个月都创建一个单一的表的历史数据的集合可以通过Merge存储引擎合并为一张表。
Federated
该存储引擎可以 将不同的MySQL服务器联合起来,逻辑上组成一个完整的数据库。非常适合数据库分布式应用。
可以使你在本地数据库中访问远程数据库中的数据,针对federated存储引擎表的查询会被发送到远程数据库的表上执行,本地不存储任何数据。
场景: dblink。
缺点
- 对本地虚拟表的结构修改,并不会修改远程表的结构
- truncate 命令,会清除远程表数据
- drop命令只会删除虚拟表,并不会删除远程表
- 不支持 alter table 命令
- select count(*), select * from limit M, N 等语句执行效率非常低,数据量较大时存在严重问题,但若按主键或索引列查询,则很快,如以下查询就非常慢(假设 id 为主索引)
select id from db.tablea where id >100 limit 10 ;
而以下查询就很快:
select id from db.tablea where id >100 and id<150
如果虚拟虚拟表中字段未建立索引,而实体表中为此字段建立了索引,此种情况下,性能也相当差。但是当给虚拟表建立索引后,性能恢复正常。
类似 where name like "str%" limit 1 的查询,即使在 name 列上创建索引,也会导致查询过慢,是因为federated会将所有满足条件的记录读取到本地,再进行 limit 处理。