MySQL----表存储引擎

1,前言

存储引擎是MySQL区分于其他数据库的一个最重要特性。存储引擎的好处是:每个存储引擎都有各自的特点,能够根据具体应用建立不同的存储引擎表。MySQL的核心:存储引擎

MySQL本身也提供了预定义的存储引擎接口,用户可以根据存储引擎接口来编写自己的存储引擎

由于MySQL的开源特性,存储引擎可以分为MySQL官方引擎和第三方存储引擎
有些第三方存储引擎非常强大,如大名鼎鼎的InnoDB存储引擎(已经被Oracle收购了)

2,存储引擎

2.1,InnoDB存储引擎

InnoDB引擎支持事务,主要面向在线事务处理(OLTP)方面的应用。其特点是行锁设计、支持外键,并支持类似于Oracle的非锁定读,即默认情况下读取操作不会产生锁。

在MySQL的Windows版本下的InnoDB是默认的存储引擎,同时InnoDB默认地被包含在所有的MySQL二进制发布版本中。

InnoDB存储引擎将数据放在一个逻辑的表空间中,这个表空间就像黑盒一样由InnoDB自身进行管理,从MySQL 4.1开始,它可以将每个InnoDB存储引擎的表单独存放到一个ibd文件中。

InnoDB通过使用多版本并发控制(MVCC)来获得高并发性,并且实现了SQL标准的4种隔离级别,默认为REPEATABLE级别。同时使用一种被称为next-key locking的策略来避免幻读的产生

除此之外,InnoDB存储引擎还提供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能和高可用的功能

对于表中数据的存储,InnoDB存储引擎采用了聚集(clustered)的方式,这种方式类似于Oracle的索引聚集表(index organized table,IOT)。每张表的存储都按照逐渐的顺序存放,如果没有显式地在表定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并以此作为主键

2.2,MyISAM存储引擎

MyISAM存储引擎是MySQL官方提供的存储引擎,特点是不支持事务、表锁和全文索引,对于一些OLAP(Online Analytical Processing,在线分析处理)操作速度快。除Windows版本外,是所有MySQL版本默认地存储引擎。

MyISAM存储引擎表由MYD和MYI组成

  • MYD:用来存放数据文件
  • MYI:用来存放索引文件

可以通过myisampack工具来压缩和解压数据文件【myisampack工具使用的是赫夫曼编码静态算法来压缩数据,因此压缩出来的表是只读的】

在MySQL 5.0之前,MYISAM默认支持的表是4G;MySQL 5.0之后,MySQL默认支持256T的单表数据

值得一提的是

对于MyISAM存储引擎表,MySQL数据库只缓存其索引文件,数据文件的缓存交由操作系统本身来完成,这与其他使用LRU算法缓存数据的大部分数据库大不相同。此外,在MySQL 5.1.23版本之前,无论是在32位还是64位操作系统环境下,缓存索引的缓冲区最大只能设置4G在之后的版本中,64位系统可以支持大于4G的索引缓冲区

2.3,Memory存储引擎

Memory存储引擎(之前被称为HEAP存储引擎)将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的所有数据将会消失。它非常适合用于存储临时数据的临时表,以及数据仓库中的纬度表。默认使用哈希索引,而不是我们熟悉的B+树索引

Memory存储引擎虽然速度很快,但其只支持表锁,并发性能较差,不支持TEXT和BLOB列类型。存储变长字段(varchar)时是按照定长字段(char)的方式进行的,因此会浪费内存(已经有人给出了Patch方案解决这个问题)

MySQL数据库使用Memory存储引擎作为临时表来存放查询的中间结果集,若中间结果集大于Memory存储引擎表的容量设置,又或者中间结果含有TEXT或BLOB列类型字段,则MySQL数据库会把其转换到MyISAM存储引擎表而不会存放到磁盘。之前提到MyISAM不缓存数据文件,因此此时产生的临时表的性能对于查询会有损失。

2.4,Archive存储引擎

Archive存储引擎只支持INSERT和SELECT操作,MySQL 5.1开始支持索引。其使用zlib算法将数据行进行压缩后存储,压缩比率一般可达1 : 10。正如其名,Archive非常适合存储归档数据,如日志信息。Archive存储引擎使用行锁来实现高并发的插入操作,但其本身并不是事务安全的存储引擎,其设计目标主要是提供高速的插入和压缩功能。

2.5,Federated存储引擎

Federated存储引擎并不存放数据,它只是指向一台远程MySQL数据库服务器上的表。这非常类似于SQL server的链接服务器和Oracle的透明网关,不同的是,当前Federated存储引擎只支持MySQL数据库,不支持异构数据库

2.6,Maria存储引擎

Maria存储引擎是新开发的引擎,设计目标主要是用来取代原有的MyISAM存储引擎,从而成为MySQL的默认存储引擎。其特点是:缓存数据和索引文件,行锁设计,提供MVCC功能,支持事务和非事务安全的选项支持,以及更好的BLOB字符类型的处理性能。

未完待续……

你可能感兴趣的:(MySQL,数据库,mysql,数据库,database)