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引擎等等还有很多存储引擎,选择合适的使用吧