MySQL表存储引擎

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

MySQL是开源的,可以根据MySQL预定义的存储引擎接口编写自己的存储引擎,也可以通过修改源码来实现自己想要的特性。

InnoDB存储引擎

支持事务,主要面向在线事务处理(OLTP)方面的应用。特点是行锁设计、支持外键,默认情况下读取操作不会产生锁。
InnoDB通过使用多版本并发控制(MVCC)来获得高并发性,并且实现了SQL标准的4种隔离级别,默认为REPEATABLE级别。同时使用一种被称为next-key locking的策略来避免幻读(phantom)现象的产生。此外,InnoDB存储引擎还提供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能和高可用的功能。
对于表中的数据,InnoDB采用了聚集(clustered)的方式,这种方式类似于Oracle的索引聚集表(index organized table,IOT)。每张表的存储都按主键的顺序存放,如果没有显式的在表定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并以此作为主键。

MyISAM存储引擎

特点是不支持事务、表锁和全文索引,对于一些OLAP(Online Analytical Processing,在线分析处理)操作速度快。
MyISAM存储引擎表有MYD和MYI组成,MYD用来存储数据文件,MYI用来存储索引文件。
MySQL5.0之前,MyISAM默认支持的表大小为4G,5.0后,默认支持256T的单表数据。

NDB存储引擎

一个集群存储引擎。特点是数据全部存放在内存中(5.1开始,可以将非索引数据存在磁盘上),主键查找速度极快,通过添加NDB数据存储节点(Data Node)可以线性的提高数据库性能,是高可用、高性能的集群系统。

Memory存储引擎

将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中数据将消失。非常适用于存储临时数据的临时表,以及数据仓库的纬度表。默认使用哈希索引,而不是我们熟悉的B+树索引。

Memory存储引擎速度非常快,使用上还是有一定限制。只支持表锁,并发性能较差,不支持TEXT和BLOB列类型。存储变长字段是按照定长字段方式进行的,浪费内存。
MySQL数据库使用Memory存储引擎作为临时表来存放查询的中间结果。如果中间结果大于Memory存储引擎的容量设置,又或者中间结果含有TEXT或BLOB列类型字段,则MySQL数据库会把其转换到MyISAM存储引擎表而存放到磁盘。MyISAM不缓存数据文件,因此这时产生的临时表的性能对于查询会有损失。

Archive存储引擎

只支持SELECT和INSERT操作,5.1开始支持索引。非常适合存储归档数据,如日志信息。

你可能感兴趣的:(#,mysql)