Mysql系列(三)—mysql存储引擎

mysql从5.5.8版本开始,Innodb存储引擎是默认的存储引擎,之前默认为MyISAM

Innodb存储引擎

  1. 支持事务
  2. 行锁设计、支持外键,支持类似于oracle的非锁定读
  3. Innodb从4.1版本开始将每个表放到一个独立的idb文件中
  4. Innodb支持使用裸设备来建立其表空间
  5. Innodb使用多版本并发控制(MVCC)来提高并发性,并且实现了sql标准的4种隔离级别,默认为REPEATABLE。使用next-keylocking的策略来避免幻读的现象。此外还支持插入缓冲、二次写、自适应哈希索引、预读等高性能和高可用的功能。
  6. Innodb存储引擎采用了聚集的方式,因此每张表都是按照主键的顺序进行存放的。

MyISAM存储引擎

  1. 不支持事务
  2. 表锁设计、支持全文索引,更适用于ETL的数据处理以及报表等功能
  3. MyISAM缓冲池只缓存索引文件,而不是数据文件。由MYD和MYI组成,前者存放数据文件,后者存放索引文件。MYD可用使用myisampack工具来进一步压缩数据文件,压缩算法为赫夫曼编码静态算法来压缩数据,压缩后的表是只读的,同时也可以使用其来解压数据文件。
  4. mysql5.0之前,MyISAM默认支持的表大小为4G。5.0之后,默认支持256T的单表数据

 

NDB存储引擎

  1. 集群存储引擎,类似于oracle的rac集群,与其不同的是,ndb结构是share nothing的集群架构
  2. NDB的特点是数据全部存储在内存种,因此主键查找极快
  3. NDB存储引擎的连接操作(join)实在mysql数据库层来完成的,而不是存储引擎层完成的。复杂的连接操作需要巨大的网络开销,因此查询速度很慢。

Memory存储引擎

  1. 将数据放在内存中,如果数据发生崩溃,表中的数据都将消失。所以非常适合用于存放临时数据以及数据仓库中的维度表。默认使用hash索引
  2.  只支持表锁,并发性能差,不支持text和blob类型。存储变长字段会按照定常字段的方式进行,因此会浪费内存。

Archive存储引擎

  1. 只支持insert和select操作,从mysql5.1开始支持索引。使用zlib算法进行将数据行压缩存储,压缩比一般可达1:10.因此其非常适合存储归档数据,如:日志信息。
  2. 使用行锁来实现高并发的插入操作,本身并不是事务安全的存储引擎,其设计目标是提供高速的插入和压缩功能

Federated存储引擎

     存储引擎表并不存放数据,它指向一台远程的mysql数据库服务器上的表。只支持mysql数据库表,不支持异构数据库表。

Maria存储引擎

     设计目标是取代原有的MyISAM存储引擎。在其基础上支持缓存数据和索引文件,应用了行锁设计,提供MVCC功能,支持事务和非事务安全的选项。

     除此之外还有很多的存储引擎,不同的存储引擎有其各自的使用场合。不同存储引擎之间的比较如下图:

                                   Mysql系列(三)—mysql存储引擎_第1张图片

 

你可能感兴趣的:(mysql)