MySQL数据库的存储引擎,以及之间的区别
时间:07-12来源:作者:点击数:
- 什么是存储引擎?
- 存储引擎就是一种数据存储方式,不同的存储引擎对应不同的存储方式、索引方式、锁定水平,当然就提供不同的作用。
- MySQL支持很多存储引擎,包括MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE等,其中InnoDB和BDB支持事务安全。它还支持一些第三方的存储引擎,例如TokuDB(高写性能高压缩存储引擎)、Infobright(列式存储引擎)
- 在MySQL中的存储引擎有很多种,可以通过“show engines”语句来查看
- 各个数据库存储引擎
- InnoDB:提供ACID事务,系统崩溃修复能力和多版本并发控制的行级锁,支持自增长序列,支持外键,mysql5.5之后默认数据库引擎
- MyISAM:读取速度优越,常用于高读取的应用场景数据库,支持三种不同类型的存储结构:静态型、动态型、压缩型。不支持事务和外键。
- MyISAM与InnoDB的区别与选择
- 区别:
- InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;
- InnoDB支持外键,而MyISAM不支持,对一个包含外键的InnoDB表转为MyISAM会失败;
- InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高,但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据,主键不应该过大,因为主键太大,其他索引也都会很大;而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针,主键索引和辅助索引是独立的;
- InnoDB不保存表的具体行数,执行select count(*) fron table 时需要全表扫描,而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
- InnoDB不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高。
- 选择:
- 是否支持事务,如果要请选择InnoDB,如果不需要可以考虑MyISAM;
- 如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读写也挺频繁的,请使用InnoDB;
- 系统崩溃后,MyISAM恢复起来更困难,能否接受;
- MySQL5.5版本开始InnoDB已经成为MySQL的默认引擎(之前是MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不会差
- MEMORY
MEMORY存储引擎是用保存在内存中的数据来创建表,每个memory表对应一个磁盘文件。格式是.frm
特点:由于他的数据是存放在内存中的,并且默认使用HASH索引,所以它的访问速度特别快,同时也造成了他的缺点,就是数据库服务一旦关闭,数据就会丢失,另外对表的大小有限制
每个memary表中可存储数据量的大小,受到max_heap_table_size变量的约束,他的初始值是16MB,可以在定义Memary表的时候通过max_rows指定表的最大行数
适用场景:内容变化不频繁的代码表,作为统计操作的中间结果表,便于利用它速率快的优势高效的对中间结果进分析。
- MERGE
Merge表是一组MyISAM表的组合,这些myisam表的结构必须完全相同,MERGE表本身并没有数据,对它的操作实际上是对内部MYISAM表的操作。
MERGE表在磁盘上保留两个文件,.frm文件存储表的定义,.mrg文件存储组合表的信息
应用场景:用于将一系列MyISAM表以逻辑方式组合在一起,并作为一个对象引用它们
优点:突破对单个MyISAM表的大小限制,通过将不同的表分布在多个磁盘上,提高访问效率
- tokuDB
tokuDB是第三方存储引擎,不是mysql自带的
特性:
使用Fractal树索引保证了高效的插入性能
强大的压缩特性,比INNODB高近10倍
支持在线DDL操作(Hot Schema Changes特性)
使用Bulk Loader达到最快加载大量数据
提供了主从延迟的消除技术
适用场景:
日志数据,因为日志数据的插入频繁且存储量大
历史数据,通常不会再有写操作,可以利用高压缩特性进行存储
在线DDL较频繁的场景,十一年tokuDB可大大增加系统的可用性
- mysql中指定引擎的方法:1、创建表时,可以通过ENGINE来指定存储引擎,在create语句最后加上“engine=存储引擎;”即可;2、修改表时,可以使用“alter table 表名 engine=存储引擎;”来指定存储引擎。
方便获取更多学习、工作、生活信息请关注本站
微信公众号