mysql常用存储引擎简介

来源:互联网 发布:用php编写九九乘法表 编辑:程序博客网 时间:2024/05/29 08:39

1.InnoDB
从mysql 5.5版本开始,innodb是mysql默认的存储引擎。innodb具有以下优点
灾难恢复性好
支持事务,默认的事务隔离级别是可重复读,其事务控制是通过多版本并发控制来实现的。
使用行级锁
对于InnoDB引擎中的表, 其数据的物理组织形式是簇表(Cluster Table) , 数据按主键来组织, 也就是说主键索引和数据是在一起的, 数据按主键的顺序物理分布。 数据表的另一种常见形式是非簇表, 其索引是有序的, 而数据是无序的。
实现了缓冲管理, 不仅能缓冲索引也能缓冲数据, 并且会自动创建散列索引以加快数据的获取。 相比之下, MyISAM只是缓存了索引。
支持外键。
支持热备份
2.MyISAM引擎
可以配合锁, 实现操作系统下的复制备份、 迁移。
使用表级锁, 并发性差。
支持全文检索(MySQL InonoDB在5.6以后也支持全文检索) 。
主机宕机后, MyISAM表易损坏, 灾难恢复性不佳。
无事务支持。
只缓存索引, 数据的缓存是利用操作系统缓冲区来实现的。 可能引发过多的系统调用且效率不佳。
数据紧凑存储, 因此可获得更小的索引和更快的全表扫描性能。
3.MEMORY引擎
MEMORY存储引擎提供“内存”表, 也不支持事务、 外键。
使用内存表(内存引擎) 可以显著提高访问数据的速度, 可用于缓存会频繁访问的、 可以重构的数据、 计算结果、 统计值、 中间结果, 但也有如下这些不足之处。
使用的是表级锁, 虽然内存访问快, 但如果频繁地读写, 表级锁可能会成为瓶颈所在。
只支持固定大小的行。 VARCHAR类型的字段会存储为固定长度的CHAR类型, 浪费空间。
不支持TEXT、 BLOB字段。 当有些查询需要使用到临时表(使用的也是MEMORY存储引擎) 时如果表中有TEXT、 BLOB字段, 那么会转化为基于磁盘的MyISAM表, 严重降低性能。
由于内存资源成本昂贵, 一般不建议设置过大的内存表, 如果内存表满了, 就会在MySQL错误日志里发现类似“Thetable‘table_name’is full”这样的错误, 可通过清除数据或调整内存表参数来避免报错。
服务器重启数据会丢失
4.ARCHIVE引擎
ARCHIVE存储引擎是被设计用来存储企业中的大量流水数据的存储引擎。 ARCHIVE引擎使用zlib无损数据压缩, 让数据都保存在压缩的存档表中。 当数据被插入时, 它们被压缩。
它只支持INSERT和SELECT, 支持自增键及其上的索引, 不支持其他索引。 它适合做日志记录、 用户行为分析, 不需要UPDATE、 DELETE和索引的数据

mysql的存储引擎有很多,我们在实际使用的过程需要按照自己的需求去选择,选择的时候需要考虑以下因素
是否需要事务支持。
是否为高并发, InnoDB实现了行锁, 这方面的表现大大优于MyISAM。
索引, 不同存储引擎的索引实现不尽相同。
是否需要外键。
高效缓冲数据, InnoDB缓冲数据而MyISAM只缓冲了索引。
备份, 是否需要支持热备份。