mysql存储引擎的特点

发布时间 2023-04-17 10:31:25作者: 甘蔗宗师

innodb存储引擎

innodb存储引擎支持行级锁,外键,事务面对的主要应用是OLTP(联机事务处理)。并且默认读取操作不会产生锁。从mysql5.5.8版本开始就是mysql默认的存储引擎。

innodb存储引擎就是将表数据放在一个表空间文件中,这个表空间文件在linux系统的表现方式就是ibd文件。这里有个参数“innodb_file_per_table”当这个参数开启时每张表都会存放在一个独立的ibd文件中。而ibd文件中会存放表结构、数据和表对应的索引信息。对表中的数据innodb则采用了一种聚集的方式存放,如果建表时指定了主键同时建立了主键索引那这个索引就是聚集索引。没有指定主键数据库会把第一个唯一索引指定为聚集索引,既没有主键索引也没有唯一索引,数据库就会生成一个隐藏的rowid作为主键。具体的细节等写到索引再详细说。

通过”多版本并发控制(mvcc)”来实现高并发,值得一提的是这并不是Mysql独有的笔者接触到的postgresql也是用的mvcc,但是细节上略有不同这个等写到时可以比较一下。Mysql的mvcc也是支持四种隔离级别“读未提交(READ-UNCOMMITTED)”,“读已提交(READ-COMMITTED)”,“不可重复读(REPEATABLE-READ)”,“序列化(SERIALIZABLE)”,默认是第三种。还支持预读(read ahead)、插人缓冲(insert buffer)、自适应哈希索引(adaptive hash

index)、二次写(double write)等功能实现高性能和高可用。

 

myisam存储引擎

       MyISAM存储引擎不支持事务、表锁,外键,但是支持全文索引,主要用于一些(联机分析处理)OLAP的应用。在早期的mysql数据库中大概是5.5版本之前MyISAM存储引擎是默认的存储引擎。MyISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件。并且可以使用myisampack工具来进一步压缩数据文件,但是压缩后的表是只读的,同时可以通过myisampack来解压。在5.0版本之前,MyISAM默认支持的表大小为4GB,大于4GB的表,要制定MAX ROWS和AVG_ROW LENGTH属性。从MySQL5.0版本开始,MyISAM默认支持256TB的单表数据。

 

Maria存储引擎

       常用的一般就是innodb和MyISAM两种存储引擎,但是看有些人说是myisam的“改进版本觉得比较有意思还是想介绍一下。特点是:支持缓存数据和索引文件,支持了行锁和mvcc功能,指出全文和空间索引。用官网的话说就是“支持更大的索引、更快的索引扫描、更快的插入速度、更快的查询速度等。”但是这几个“更应该是相较” MyISAM而言。