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. oeasy教您玩转python - 008 - # ascii码表

    ​ ASCII 码表 回忆上次内容 通过 help()可以从 python 命令行模式进入到帮助模式 通过 q 退出 ord(c)和 chr(i) 这是俩函数 这俩是一对,相反相成的 ord 通过字符 ...

  2. AT_abc215_d 题解

    洛谷链接&Atcoder 链接 本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读. 题目简述 给定 \(N\),\(M\) 及含有 \(N\) 个整数的序列 \(A\). 求 \( ...

  3. JavaScript小面试~节流

    节流,当用户发出多次请求时,需要对事件进行限制,不要让事件过多触发.场景:在用户浏览页面的时候,用户拼命滚动屏幕时,控制页面滚动的事件会多次触发,会导致网络阻塞或者出现渲染差.此时需要对其进行约束.无 ...

  4. Windows/Linux 安装NVM及npm配置

    nvm安装及npm配置 nvm nvm下载 Windows: Releases · coreybutler/nvm-windows (github.com) Windows直接下载相应版本的nvm-s ...

  5. VUE系列之性能优化--懒加载

    一.懒加载的基本概念 懒加载是一种按需加载技术,即在用户需要时才加载相应的资源,而不是在页面初始加载时一次性加载所有资源.这样可以减少页面初始加载的资源量,提高页面加载速度和用户体验. 二.Vue 中 ...

  6. App如何利用推送消息有效实现拉新促活?

    对于大多数App来说,如何快速建立与用户的联系.提高用户活跃度.提升用户转化率,是产品运营过程中十分关心的问题,在常见的运营手段中,Push推送消息以其高性价比成为首选策略.但在实际运营过程中,推送消 ...

  7. 【Zookeeper】Re01 安装与操作

    Zookeeper基于JDK开发出来的 运行环境至少需要JRE 快速安装JDK: yum install -y java-1.8.0-openjdk-devel.x86_64 # ZK镜像仓库 htt ...

  8. 元学习的经典文献:S. Thrun - 1998 - LEARNING TO LEARN: INTRODUCTION AND OVERVIEW

    地址: https://link.springer.com/chapter/10.1007/978-1-4615-5529-2_1

  9. Streamlit运行出现ModuleNotFoundError: No module named ‘altair.vegalite.v4‘ —— ModuleNotFoundError: No module named 'altair.vegalite.v4'

    参考: https://blog.csdn.net/ikun_King/article/details/131852167 解决方法: pip install altair=4.2.2

  10. 多线程之park()与interrupt()的理解

    1.背景 其他不多说,很多时候面试会问 2.代码 package com.ldp.demo01; import com.common.MyThreadUtil; import lombok.exter ...