MySQL的存储引擎

目录

什么是引擎?

MySQL的常见引擎

CSV存储引擎

Archive(档案)存储引擎

Memory存储引擎

MyISAM存储引擎

InnoDB存储引擎

InnoDB与MyISAM的比较


 

什么是引擎?

引擎(Engine)是电子平台上开发程序或系统的核心组件。利用引擎,开发者可迅速建立、铺设程序所需的功能,或利用其辅助程序的运转。一般而言,引擎是一个程序或一套系统的支持部分。常见的程序引擎有游戏引擎、搜索引擎、杀毒引擎等。

 

MySQL的常见引擎

CSV存储引擎

主要特点:

数据存储以CSV文件形式存储;

CSV数据的存储用逗号隔开,可直接编辑CSV文件进行数据的编排,数据安全性较低;

不能定义索引;

列必须定义成非NULL;

不能设置自增列;

不适用大表或数据的在线处理。

应用场景:

数据的快速导出导入,表格直接转换成CSV。

 

Archive(档案)存储引擎

主要特点:

将数据压缩后以ARZ文件形式存储;

只支持insert和select两种操作;

只允许自增ID列建立索引;

支持行级锁;

不支持事务;

数据占用磁盘空间少。

应用场景:

日志系统,大量的设备数据采集。

 

Memory存储引擎

主要特点:

数据都是存储在内存中,IO效率要比其他引擎高很多,服务重启数据丢失,内存数据表默认只有16M;

支持hash索引,B tree索引,默认hash(查找复杂度0(1)),字段长度都是固定长度varchar(32)=char(32);

不支持大数据存储类型字段如 blog,text。

应用场景:

缓存等值查找热度较高数据;

大多数情况都是采用Memory作为临时表的存储引擎,如果临时表过大(超过16M),使用MyISAM引擎。

 

MyISAM存储引擎

主要特点:

MySQL5.5版本之前的默认存储引擎,较多的系统表也还是使用这个存储引擎,系统临时表也会用到MyISAM存储引擎;

select count(*) from table 无需进行数据的扫描;

数据(MYD)和索引(MYI)分开存储;

支持表级锁;

不支持事务。

InnoDB存储引擎

主要特点:

MySQL5.5版本之后的默认存储引擎;

支持事务;

支持行级锁;

支持MVCC;

支持聚集索引方式存储数据。

 

InnoDB与MyISAM的比较

存储引擎 MyISAM InnoDB
存储结构 MyISAM在磁盘上存储成三个文件,其中.frm文件存储表定义,.MYD 为数据文件,.MYI 为索引文件。 InnoDB是由.frm文件、表空间(分为独立表空间或者共享表空间)和日志文件(redo log)组成。
存储空间 可被压缩,存储空间较小。 需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。
事务支持 强调的是性能,执行速度比InnoDB快,但不支持事务。 支持事务,具有ACID的特性
只支持表级锁。 如果执行大量的select,MyISAM是更好的选择。但是在增删改的时候需要锁定整个表格,效率会低一些。 支持事务和行级锁,是InnoDB的最大特色。行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁只有在WHERE条件命中索引时才是有效的,如果全表扫描会锁定整张表。
索引 MyISAM的索引都属于B+Tree结构的非聚簇索引,索引与数据是分开的,B+Tree的叶子节点上存放的是数据的地址。主键索引和辅助索引没有区别,只是主键索引必须是唯一的。 InnoDB的主键是B+Tree结构的聚簇索引,将主键组织到一棵B+Tree中,而行数据就储存在叶子节点上。聚簇索引是按大小排列的,因此对于范围查询的效率很高。InnoDB中除了主键索引其他辅助索引都是非聚簇索引,叶子节点则存储的是主键的值,所以通过辅助索引查询其实需要两个过程,先确定数据的主键,再通过主键进行查询。
select count(*) MyISAM保存了表的总行数,如果select count(*) from table不加where条件,会直接取出出该值。 InnoDB没有保存表的总行数,如果使用select count(*) from table就会遍历整张表。如果加了where条件后,MyISAM和InnoDB处理的方式都一样。
全文索引 支持 FULLTEXT类型的全文索引 不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。
外键 不支持 支持

 


你可能感兴趣的:(MySQL)