MySQL中的存储引擎

MySQL的插件式存储引擎特性使其独具优势,其中InnoDB和MyISAM是最常见的两种。InnoDB是默认引擎,支持事务和行级锁,适合高并发场景;而MyISAM不支持事务,适合读取密集型应用。InnoDB使用聚集索引,MyISAM则非聚集,InnoDB的行锁提高并发,MyISAM则是表锁导致并发性能较低。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL体系架构如下图:

从体系结构图中可以发现,MySQL数据库区别于其它数据库的最重要的一个特点就是其插件式的表存储引擎。

插件式存储引擎的好处是,每个存储引擎都有各自的特点,能够根据具体的应用建立不同存储引擎表。

1. InnoDB存储引擎

lnnoDB是MySQL的默认事务型引擎,也是最重要、使用最广泛的存储引擎。它被设计用来处理大量的短期(short-lived)事务,应该优先考虑InnoDB引擎。

2. MyISAM存储引擎

在MySQL 5.1及之前的版本,MylSAM是默认的存储引擎。

但是MylSAM不支持事务和行级锁,而且崩溃后无法安全恢复。

同时MylSAM对整张表加锁,很容易因为表锁的问题导致典型的性能问题。

3. Memory存储引擎

Memory表至少比MylSAM表要快一个数量级,数据文件是存储在内存中。Memory表的结构在重启以后还会保留,但数据会丢失。
Memroy表在很多场景中可以发挥很好的作用:

用于查找(lookup)或者映射(mapping)表,例如将邮编和州名映射的表。

用于缓存周期性聚合数据(periodically aggregated data)的结果。

用于保存数据分析中产生的中间数据。

4. Archive存储引擎

Archive存储引擎只支持insert和delete操作,会缓存所有的写并利用zlib对插入的行进行压缩,所以比MyISAM表的磁盘I/O更少。但是每次select查询都需要执行全表扫描,所以Archive表适合日志和数据采集类应用。

5. CVS存储引擎 

CVS引擎可以将普通的CVS文件(逗号分割值的文件)作为MySQL的表来处理,但这种表不支持索引。因此CVS引擎可以作为一种数据交换的机制,非常有用。

6. MyISAM和InnoDB的区别是什么?

1.InnoDB支持事务,MylSAM不支持事务

这是MySQL将默认存储引擎从MylSAM变成InnoDB的重要原因之一

2.InnoDB支持外键,而MylSAM不支持

对一个包含外键的InnoDB表转为MyISAM会失败

3.lnnoDB是聚集索引,MylSAM是非聚集索引

聚簇索引的数据文件存放在主键索引的叶子节点上,因此 InnoDB必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大

而MylSAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的

4.InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快

5.InnoDB最小的锁粒度是行锁,MylSAM最小的锁粒度是表锁

一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。这也是MySQL将默认存储引擎从 MylSAM变成InnoDB的重要原因之一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值