mysql存储引擎的理解
1、什么是存储引擎?
MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。
例如,如果你在研究大量的临时数据,你也许需要使用内存MySQL存储引擎。内存存储引擎能够在内存中存储所有的表格数据。又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)。
这些不同的技术以及配套的相关功能在 MySQL中被称作存储引擎(也称作表类型)。 MySQL默认配置了许多不同的存储引擎,可以预先设置或者在MySQL服务器中启用。你可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储你的信息、如何检索这些信息以及你需要你的数据结合什么性能和功能的时候为你提供最大的灵活性。
2、MySql存储引擎介绍(基于MySQL5.6.16)
查看MySql存储引擎的命令:show engines; 一般默认采用InnoDB.
Transactions:是否支持事务
XA:是否支持分布式事务(分布式事务文章很多,这里后续再去了解)
Savepoints:事务的保存节点,经常与rollback一起使用,部分事务。
INNODB
InnoDB是MySQL默认、最常用的存储引擎,目前在很多的互联网公司使用,是一个健壮的事务性存储引擎。InnoDB还引入了行级锁定和外键约束(阿里规约不推荐使用),InnoDB的理想使用场景。
1)更新密集的表。InnoDB特别适合处理多重并发的更新请求。
2)事务。对于单机事务,分布式事务都有很好的支持。
3)自动灾难恢复。
4)支持自增列。
TOKUDB
TokuDB 是一个支持事务的“新”引擎,有着出色的数据压缩功能,由美国 TokuTek 公司(现在已经被 Percona 公司收购)研发。拥有出色的数据压缩功能,如果您的数据写多读少,而且数据量比较大,强烈建议您使用TokuDB,以节省空间成本,并大幅度降低存储使用量和IOPS开销,不过相应的会增加 CPU 的压力。TokuDB的特点:
1)除了支持现有的聚合索引外,还支持了(第二)集合索引,举例:如果 where 条件中直接命中了Index索引,直接返回数据,不需要再从主键聚合索引查询。
2)索引的在线创建,允许直接给表增加索引而不影响更新语句,不过比通常的方式慢很多,不推荐使用。
3)在线更改列,有轻微的阻塞。
4)数据压缩;在后台进行整体的数据压缩,高级别的压缩比较消耗CPU,官方建议6核以下采用标准压缩,反之使用高级压缩。官方宣称可以达到1:12.
5)非常快的写入性能,无undo log 官方称比InnoDB高9倍。
6)数据量可以扩展到几个TB,且没有索引碎片
7)不适合大量读取的场景,因为压缩解压缩的原因,CPU占用高2~3倍,但是压缩后IO开销低,大概是2倍的消耗,比较合适的场景是日志记录的写入或者历史数据归档。
CSV
CSV存储引擎可以将csv文件作为mysql的表进行处理。存储格式就是普通的csv文件。(不详细解释)
BLACKHOLE
Blackhole引擎–“黑洞”. 其作用正如其名字一样:任何写入到此引擎的数据均会被丢弃掉, 不做实际存储;Select语句的内容永远是空。 和Linux中的 /dev/null 文件完成的作用完全一致。
其使用场景可以用作主库的二次分发处理节点,详细介绍请参考:MySQL的BlackHole引擎在主从架构中的作用
SPHINX
Sphinx是一款基于SQL的高性能全文检索引擎,Sphinx的性能在众多全文检索引擎中也是数一数二的,利用Sphinx,我们可以完成比数据库本身更专业的搜索功能,而且可以有很多针对性的性能优化。建议专业的模块做专业的东西,如果真要检索还是使用ES或者Solr吧
MEMORY
memory存储引擎从字面上理解,就是内存引擎,可以得到最快的响应时间,但是当mysql崩溃了以后哦,所有的数据都会丢失,所以存在一定的缺陷。同时他要求存储在memory数据表的数据是是长度不变的格式,意味着不能使用BLOB和TEXT这种。VARCHAR在mysql内部被当做长度不变的hcar类型,所以可以使用。memory的理想使用场景(建议直接使用redis更合适)。
ARCHIVE
archive是归档的意思,归档表有很好的压缩机制,使用zlib压缩裤,经常用于数据归档,在mysql5.5以后,归档表也支持索引。
MYISAM
MyIsam不支持事务和外键,访问速度更快。每个MyIsam在磁盘上存储为3个文件: .frm(存储表的定义);MYD(myData,存储数据);MYI(MYIndex,存储索引)。
数据文件和索引文件可以放在不同的目录,平均分配IO,获取更快的速度,需要在创建表的时候来进行制定绝对路径。
MyIsam 拥有检查和恢复功能,当mysql崩溃以后,可以通过check Table来检查表的健康度,并用repair table来修复损坏的表。
MRG_MYISAM
Merge_MyIsam是一组MyIsam的表的组合,这些MyIsam表结构必须是完全相同。可以理解为merge表是一组MyIsam表的聚合器,merge表并没有数据,对他的查询和更新操作实际是对内部的MyIsam表进行操作。使用方法可以参考:MySQL 使用 MRG_MyISAM 存储引擎来实现分表
PERFORMANCE_SCHEMA
MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。
本篇文章转载于https://blog.csdn.net/huxianbo0807/article/details/97012540