InnoDB和MyISAM是MySQL数据库中两种常用的存储引擎,它们在数据存储结构、事务支持、锁的支持、外键支持、性能等方面存在显著的差异。下面将详细介绍这两种存储引擎的特点和优势。

什么是存储引擎

​ MySQL中的数据用各种不同的技术存储在文件(或者内存)中。每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。例如,如果你在研究大量的临时数据,你也许需要使用内存MySQL存储引擎。内存存储引擎能够在内存中存储所有的表格数据。又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)。

​ 这些不同的技术以及配套的相关功能在 MySQL中被称作存储引擎(也称作表类型)。 MySQL默认配置了许多不同的存储引擎,可以预先设置或者在MySQL服务器中启用。你可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储你的信息、如何检索这些信息以及你需要你的数据结合什么性能和功能的时候为你提供最大的灵活性

InnoDB存储引擎

1. 数据存储结构

  • InnoDB在磁盘上存储的数据和索引被组织在表空间中,表空间可以包含多个文件(或原始磁盘分区)。这与MyISAM表不同,后者将每个表存储在分离的文件中。
  • InnoDB表的大小只受限于操作系统的文件大小,可以非常庞大。

2. 事务支持

  • InnoDB支持ACID(原子性、一致性、隔离性、持久性)兼容的事务处理,这是其最大的特色之一。
  • 它提供了回滚(rollback)和崩溃恢复能力(crash recovery capabilities),确保数据的一致性和完整性。

3. 锁的支持

  • InnoDB支持行级锁定(row-level locking),这减少了锁定冲突,提高了并发性能。
  • 它还提供了与Oracle类似的不加锁读取(non-locking read in SELECTs),增加了多用户部署的性能。

4. 外键支持

  • InnoDB是MySQL上第一个提供外键约束(FOREIGN KEY constraints)的表引擎,这有助于维护数据的一致性和完整性。

5. 性能与优势

  • InnoDB使用多版本并发控制(MVCC)技术,允许多个事务同时访问同一数据,提高了并发性能。
  • 它为在主内存中缓存数据和索引而维持自己的缓冲池,进一步提高了性能。

MyISAM存储引擎

1. 数据存储结构

  • MyISAM在磁盘上存储了三个文件:表的定义文件(.frm)、数据文件(.MYD)和索引文件(.MYI)。
  • 每个MyISAM表都存储在独立的文件中,这简化了数据备份和恢复的过程。

2. 事务支持

  • MyISAM不支持事务处理,因此不具备事务的ACID属性。
  • 这意味着在MyISAM表中,如果发生系统崩溃或电源故障,可能会丢失最近提交的事务。

3. 锁的支持

  • MyISAM只支持表级锁定(table-level locking),这意味着在对表进行读写操作时,会锁定整个表。
  • 虽然这简化了锁定机制,但在高并发环境下可能会导致性能瓶颈。

4. 性能与优势

  • MyISAM以其高读性能和全文索引支持著称。
  • 它适合读操作频繁和对数据一致性要求不高的场景,如博客、新闻网站等。

总结

选择InnoDB还是MyISAM存储引擎,需要根据具体的应用场景来决定。如果需要执行大量的INSERT或UPDATE操作,且需要事务支持、行级锁和外键支持,那么InnoDB可能是一个更好的选择。而如果需要执行大量的SELECT查询,且不需要事务支持,那么MyISAM可能是一个更合适的选择。然而,在现有的互联网场景下,对大数据的处理要求很频繁,对高并发性能要求也很高,因此InnoDB通常是更优的选择。

MySQL存储引擎:InnoDB与MyISAM的更多相关文章

  1. 常用Mysql存储引擎--InnoDB和MyISAM简单总结

    常用Mysql存储引擎--InnoDB和MyISAM简单总结 2013-04-19 10:21:52|  分类: CCST|举报|字号 订阅     MySQL服务器采用了模块化风格,各部分之间保持相 ...

  2. MySQL存储引擎InnoDB,MyISAM

    MySQL存储引擎InnoDB,MyISAM1.区别:(1)InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语 ...

  3. mysql 存储引擎 InnoDB 与 MyISAM 的区别和选择

    http://www.blogjava.net/jiangshachina/archive/2009/05/31/279288.html     酷壳 - MySQL: InnoDB 还是 MyISA ...

  4. MySQL存储引擎InnoDB与Myisam

    InnoDB与Myisam的六大区别 InnoDB与Myisam的六大区别 MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个 文件的名字以表的名字开始,扩展名 ...

  5. Mysql 存储引擎 InnoDB与Myisam的主要区别

    MySQL默认采用的是MyISAM. 1,事务处理 innodb 支持事务功能,myisam 不支持. Myisam 的执行速度更快,性能更好. MyISAM不支持事务,而InnoDB支持.InnoD ...

  6. MySQL存储引擎InnoDB与MyISAM的区别

    一.比较 事务:InnoDB是事务型的,可以使用Commit和Rollback语句. 并发:MyISAM只支持表级锁,InnoDB还支持行级锁. 外键:InnoDB支持外键. 备份:InnoDB支持在 ...

  7. MySQL存储引擎Innodb和MyISAM对比总结

    Innodb引擎 InnoDB是一个事务型的存储引擎,设计目标是处理大数量数据时提供高性能的服务,它在运行时会在内存中建立缓冲池,用于缓冲数据和索引. Innodb引擎优点 1.支持事务处理.ACID ...

  8. MySQL存储引擎——InnoDB和MyISAM的区别

    MySQL5.5后,默认存储引擎是InnoDB,5.5之前默认是MyISAM. InnoDB(事务性数据库引擎)和MyISAM的区别补充: InnoDB是聚集索引,数据结构是B+树,叶子节点存K-V, ...

  9. MySQL存储引擎 InnoDB与MyISAM的区别

    来源:http://www.jb51.net/article/47597.htm 基本的差别:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能,其执行 ...

  10. mysql存储引擎innodb、myisam区别

    MyISAM与InnoDB的区别是什么? 1. 存储结构 MyISAM:每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型..frm文件存储表定义.数据文件的扩 ...

随机推荐

  1. AT_agc022_a 题解

    洛谷链接&Atcoder 链接 本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读. 题目简述 给定字符串 \(S\) , 仅包含互不相同的小写字母, 你需要找到仅包含互不相同的小写 ...

  2. char字符_C

    字符的表示  字符类型由单引号' '包围,字符串由双引号" "包围. //正确的写法 char a = '1'; char b = '$'; char c = 'X'; char ...

  3. Java 基于Hutool实现DES加解密

    POM.XML配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  4. ffmpeg中声音解码的流程

    声音解码流程: audio初始化 fifo初始化frame初始化init_resampler 解码: 如果有帧 初始化转码空间 做转码操作 resampler 放入fifo fifo是否大于 一帧数据 ...

  5. .NET周刊【7月第3期 2024-07-21】

    国内文章 给博客园的寄语 https://www.cnblogs.com/jingc/p/18307859 作者是一名39岁的大龄C#开发程序员,对博客园的艰难处境深感触动,并购买会员支持.回顾他与博 ...

  6. 【PHP】5版本 过程式操作MySQL

    建立连接和释放连接: # 连接参数 $sever = 'localhost:3309'; $username = 'root'; $password = 'root'; # 调用连接方法,如果失败结束 ...

  7. 【ELK】Kibana-7.13.1版本 启动报错 Centos6

    报错信息: [root@centos6-1 gcc-4.8.2]# /opt/kibana-7.13.1-linux-x86_64/bin/kibana /opt/kibana-7.13.1-linu ...

  8. 使用 C# 和 ONNX 來玩转Phi-3 SLM

    LLM 席卷世界刷新 AI 的认知之后,由于 LLM 需要的硬件要求实在太高,很难在普通设备上运行,因此 SLM 逐漸受到重視,Phi-3 SLM 是由 Microsoft 所开发的模型,可以在你的电 ...

  9. ImageNet数据集下载

    ImageNet数据集是Vision领域最重要的数据集之一,十分经典也十分常用,但是该数据集体量较大,而且由于在外网下载速度较慢,其中最为重要的一点是该数据集只提供给高校科研工作者,这也就意味着你必须 ...

  10. 如何使用git通过ssh协议拉取gitee上的项目代码——如何正确的免密使用git

    如何在gitee网站上生成/添加SSH公钥见教程: 生成/添加SSH公钥 测试公私秘钥是否成功: ssh -T git@gitee.com ============================== ...