MySQL数据库的存储引擎,以及之间的区别

  • 什么是存储引擎?
    • 存储引擎就是一种数据存储方式,不同的存储引擎对应不同的存储方式、索引方式、锁定水平,当然就提供不同的作用。
    • 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=存储引擎;”来指定存储引擎。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值