MySQL读书笔记--InnoDB/MyISAM/Memory 更有深度的对比

其实很多文章都说了,InnoDB 是基于行锁设计同时支持事务和外键,MyISAM 是基于表锁设计,不支持事务和外键,Memory是内存数据库(可以想象成Memcache)等这些不同数据库之间的差异。

而今天我就说说这三种数据库其他的差异。

InnoDB:

1.InnoDB存储引擎支持事务,其设计目标主要是面向在线事务处理(OLTP)的应用

2.InnoDB存储引擎的表单独存放到一个独立的ibd文件中,此外InnoDB存储引擎支持用裸设备用来建立其表空间。(如果通过参数innodb_file_per_size设置成每个表一个表空间,只是表数据在不同的ibd文件,但它们还是有一个共享表空间还存储表结构等数据)。

3.InnoDB使用多版本并发控制(MCVV)来获得高并发性,并实现SQL标准的4种事务隔离级别同时使用一种Next-key Locking(解析锁)的策略避免幻读  (如果想了解什么是Next-key Locking 或者其他锁,可以去订阅 "架构师之路" InnoDB 专栏,里面有很详细的解释)

4.InnoDB提供 插入缓冲,二次写,自适应哈希索引等高性能和高可用功能

5.InnoDB存储引擎采用了聚集的方式,因此每个表的存储都是按照主键的顺序进行存放

6.InnoDB 聚集索引 存储整行数据

7.InnoDB 非常依赖缓存池(innodb_buffer_pool_size)。缓存池会缓存数据页,索引数据,表结构等数据

 

MyISAM:

1.MyISAM 聚集索引 不存储整行的数据,存储行数据的指针(虽然和InnoDB一样底层都是B+,但InnoDB存储了整行的数据)

2.MyISAM 主要面向OLAP数据库应用。

3.它的缓冲池只缓存索引,而不缓存行数据(key_buffer_size)

4.MyISAM 表由MYD 和 MYI组成, MYD用来存放数据问题,MYI用来存放索引文件

5.MyISAM存储引擎,其锁是表锁设计。并发读没有问题,但并发插入时,性能就要差一些。若只是底部插入。还是由一定的并发性

 

Memory:


1.Memory 将表中的数据存放在内存种,如果数据库重启或崩溃,表中数据都将消失。适合存储临时数据

2.Memory存储默认使用哈希索引,而不是B+树(与InnoDB 和 MyISAM不同)

3.Memory存储引擎作为临时表来存放查询种的中间结果集,如果中间结果集大于Memory存储引擎表的容量,又或者结果含有TEXT或BLOB列类型的字段,则MySQL数据库会把其转换到MyISAM存储引擎表而放到磁盘中

来自《MySQL技术内幕 InnoDB存储引擎》

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值