MySQL存储引擎简述

本文详细介绍了MySQL的两种主要存储引擎InnoDB和MyISAM,包括它们的特性、适用场景以及对比。InnoDB支持事务处理和外键,适合高并发和数据完整性要求较高的应用;而MyISAM则强调快速读取和简单业务,不支持事务。此外,还提到了其他存储引擎如Archive、Memory等的特点和用途。在选择存储引擎时,应根据具体需求来决定。
摘要由CSDN通过智能技术生成

存储引擎


存储引擎:就是指表的类型。其实存储引擎以前叫做表处理器,后来改名为存储引擎,它的功能就是接收上层传下来的指令,然后对表中的数据进行提取或写入操作。

为了管理方便,人们把连接管理、查询缓存、语法解析、查询优化这些并不涉及真实数据存储的功能划分为MySQL server的功能,把真实存取数据的功能划分为存储引擎的功能。所以在MySQL server完成了查询优化后,只需按照生成的执行计划调用底层存储引擎提供的AP1,获取到数据后返回给客户端就好了。

一,InnoDB 引擎

  1. InnoDB:具备外键支持功能的事务存储引擎,MySQL 3.23.34a 开始包含InnoDB存储引擎,5.5版本之后,默认采用InnoDB引擎

  2. 结构:

    • .frm:存储表结构(MySQL8.0时,合并在表名.ibd中)
    • .ibd:存储数据和索引
  3. 特点:

  • InnoDB是MySQL的默认事务型引擎:它被设计用来处理大量的短期(short-lived)事务,可以确保事务的完整提交(Commit)和回滚(Rollback)
  • InnoDB是为处理巨大数据量的最大性能设计
  1. 使用:除了增加和查询外,还需要更新、删除操作,应优先选择InnoDB存储引擎

除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎

  1. 优势:
    • 操作便利、提高了数据库的性能、维护成本低等。
    • 如果由于硬件或软件的原因导致服务器崩溃,那么在重启服务器之后不需要进行额外的操作。
    • InnoDB崩溃恢复功能自动将之前提交的内容定型,然后撤销没有提交的进程,重启之后继续从崩溃点开始执行。

二,MyISAM 引擎

  1. MyISAM:主要的非事务处理存储引擎,是5.5版本之前的默认存储引擎,提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务、行级 锁、外键,有一个毫无疑问的缺陷就是崩溃后无法安全恢复

  2. 结构:

    • .frm:存储表结构
    • .MYD:存储数据 (MYData)
    • .MYI:存储索引 (MYIndex)
  3. 特点:

    • 访问的速度快
    • 针对数据统计有额外的常数存储(count(*)的查询效率高)
  4. 使用

    • 只读应用或者以读为主的业务
    • 对事务完整性没有要求或者以SELECT、INSERT为主的应用

三,InnoDB 与 MyISAM

对比项MyISAMInnoDB
外键不支持支持
事务不支持支持
行表锁表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作行锁,操作时只锁某一行,不对其它行有影响,适合高并发的操作
缓存只缓存索引,不缓存真实数据不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响
自带系统表使用YN
关注点性能:节省资源、消耗少、简单业务事务:并发写、事务、更大资源
默认安装YY
默认使用NY
  1. 对比:
  • 对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保存数据和索引
  • MyISAM只缓存索引,不缓存真实数据;InnoDB不仅缓存索引还要缓存真实数据(事务),对内存要求较高,而且内存大小对性能有决定性的影响

四,使用

  1. 查看存储引擎

    show engines;
    
  2. 查看默认存储引擎

    show variables like '%storage_engine%';
    #或
    SELECT @@default_storage_engine;
    
  3. 设置默认存储引擎

    SET DEFAULT_STORAGE_ENGINE=MyISAM;
    

    也可以修改my.cnf文件

    default-storage-engine=MyISAM
    systemctl restart mysqld.service # 重启服务
    
  4. 设置表的存储引擎:可以为不同的表设置不同的存储引擎,即不同的表可以有不同的物理存储结构,提取和写入方式

    CREATE TABLE 表名(
    建表语句;
    ) ENGINE = 存储引擎名称;
    
  5. 修改表的存储引擎

    ALTER TABLE 表名 ENGINE = 存储引擎名称;
    

五,其它存储引擎

  1. Archive引擎:"Archive"是"归档"的意思,Archive引擎用于数据存档,仅支持插入和查询两种功能,且行被插入后不能再修改

    • 在MySQL5.5以后支持索引功能:ARCHIVE存储引擎采用了行级锁。该ARCHIVE引擎支持AUTO_INCREMENT列属性。AUTO_INCREMENT列可以具有唯一索引或非唯一索引。尝试在任何其他列上创建索引会导致错误

    • 拥有很好的压缩机制:使用z11b压缩库,在记录请求的时候实时的进行压缩,经常被用来作为仓库使用。
      创建ARCHIVE表时,存储引擎会创建名称以表名开头的文件。数据文件的扩展名为ARZ.根据英文的测试结论来看,同样数据量下,Archive表比MyISAM表要小大约75%,比支持事务处理的InnoDB表
      小大约83%。

    • 应用:Archive表适合日志和数据采集(档案)类应用;适合存储大量的独立的作为历史记录的数据。拥有很高的插入速度,但是对查询的支持较差

      特征支持
      B树索引不支持
      备份/时间点恢复 (在服务器中实现,而不是在存储引擎中)支持
      集群数据库支持不支持
      聚集索引不支持
      压缩数据支持
      数据缓存不支持
      加密数据(加密功能在服务器中实现)支持
      外键支持不支持
      全文检索索引不支持
      地理空间数据类型支持支持
      地理空间索引支持不支持
      哈希索引不支持
      索引缓存不支持
      锁粒度行锁
      MVCC不支持
      存储限制没有任何限制
      交易不支持
      更新数据字典的统计信息支持
  2. Blackhole引擎:丢弃写操作,读操作会返回空内容

    • Blackhole引擎没有实现任何存储机制,它会丢弃所有插入的数据,不做任何保存。但服务器会记录Blackhole表的日志,所以可以用于复制数据到备库,或者简单地记录到日志。但这种应用方式会碰到很多问题,因此并不推荐。
  3. CSV引擎:存储数据时,以逗号分隔各个数据项,创建CSV表时,服务器会创建一个纯文本数据文件,其名称以表名开头并带有。CSV扩展名。当你将数据存储到表中时,存储引擎将其以逗号分隔值格式保存到数据文件中。

    • CSV引擎可以将普通的CSV文件作为MySQL的表来处理,但不支持索引。
    • CSV引擎可以作为一种数据交换的机制,非常有用。
    • CSV存储的数据直接可以在操作系统里,用文本编辑器,或者exceli读取。
    • 对于数据的快速导入、导出是有明显优势的。
    • CSV引擎不支持空列(not null)
    • 创建CSV表还会创建后缀为CSM的元文件,用于存储表的状态和表中存在的行数
  4. Memory引擎:置于内存的表

    • 概述:Memory采用的逻辑介质是内存,响应速度很快,但是当mysqld守护进程崩溃的时候数据会丢失。另外,要求存储的数据是数据长度不变的格式,比如,Blob和Text类型的数据不可用(长度固定的)

    • 特征:

      • Memory同时 支持哈希(HASH)索引 和 B+树索引 。
      • Memory表至少比MyISAM表要 快一个数量级 。
      • MEMORY 表的大小是受到限制 的。表的大小主要取决于两个参数,分别是 max_rows 和max_heap_table_size 。其中,max_rows可以在创建表时指定;max_heap_table_size的大小默认为16MB,可以按需要进行扩大。
      • 数据文件与索引文件分开存储。
      • 缺点:其数据易丢失,生命周期短。基于这个缺陷,选择MEMORY存储引擎时需要特别小心。
    • 使用场景:

      • 目标数据比较小 ,而且非常 频繁的进行访问 ,在内存中存放数据,如果太大的数据会造成内存溢出
      • 数据是临时的,而且必须立即可用得到,那么就可以放在内存中
      • 存储在Memory表中的数据如果突然间 丢失的话也没有太大的关系
  5. Federated引擎:访问远程表,Federated引擎是访问其他MySQL服务器的一个代理,尽管该引擎看起来提供了一种很好的跨服务器的灵活性,但也经常带来问题,因此默认是禁用的

  6. Merge引擎:管理多个MyISAM表构成的表集合

  7. NDB引擎:MySQL集群专用存储引擎,也叫做NDB Cluster存储引擎,主要用于MySQL Cluster分布式集群环境,类似于 Oracle的RAC集群。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值