mysql 存储引擎
mysql 存储引擎
Innodb 存储引擎
Innodb 的数据存储在表空间中,表空间由一系列的数据文件组成,Innodb 可以将每个表的数据和索引存放在单独的文件中。
Innodb 采用 MVCC 来支持高并发,实现了四个标准的隔离级别,默认是可重复读,并且通过间隙锁策略解决幻读的问题。间隙锁让 Innodb 不仅仅锁定查询涉及的行,还会对索引中的间隙进行锁定,防止幻行插入。
Innodb 基于聚簇索引建立,聚餐索引对主键查询有很高的性能。它的二级索引(非主键索引)必须包含主键列,主键如果很大的话,其他索引也会很大。
MYISAM 存储引擎
Myisam 将表存储在两个文件中:数据文件和索引文件,分别以.MYD 和.MYI 为扩展名。
MyIsam 不支持事务,不支持崩溃后的安全恢复。
MyIsam 对整张表加锁,而不是针对行。读取时会对需要读到的所有表加共享锁,写入时对表加排他锁。表在读取查询同时,也可以往表中插入新纪录。
Archive 存储引擎
Archive 存储引擎只支持 insert 和 select 操作,Archive 引擎会缓存所有的写并利用 zlib 对插入的行进行压缩,所以比 MyIsam 表的磁盘 io 更少。每次 select 查询都需要执行全表扫描。Archive 适合日志和数据采集类应用,这类应用做数据分析往往需要全表扫描
CSV 引擎
将普通的 CSV 文件作为 Mysql 的表来处理,但这种表不支持索引。CSV 引擎可以作为一种数据交换机制,非常有用。
Memory 引擎
Memory 比 MyIsam 快一个数量级,因为所有数据都保存在内存中,不需要磁盘 io。Memory 表结构在重启以后还会保留,但数据会丢失。
Memory 表支持 hash 索引,因此查找操作非常快,Memory 是表级锁,并发写入的性能较低。不支持 BLOB 或 TEXT 类型的列,并且每行的长度都是固定的,即使指定了 VARCHAR 列,实际存储时也会转换成 CHAR,导致部分内存浪费。
这就是 mysql 存储引擎的大体罗列了,Innodb 存储引擎,MYISAM 存储引擎,Archive 存储引擎,CSV 引擎,Memory 引擎等等还有很多存储引擎,选择合适的使用吧
版权声明: 本文为 InfoQ 作者【周杰伦本人】的原创文章。
原文链接:【http://xie.infoq.cn/article/0c2df38c4fc30833edf65f718】。文章转载请联系作者。
评论