首页 > 数据库 >MySQL存储引擎:InnoDB与MyISAM

MySQL存储引擎:InnoDB与MyISAM

时间:2024-09-14 14:50:58浏览次数:10  
标签:存储 支持 引擎 InnoDB MyISAM MySQL

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通常是更优的选择。

标签:存储,支持,引擎,InnoDB,MyISAM,MySQL
From: https://www.cnblogs.com/yunsheng22/p/18413973

相关文章

  • rocky linux mysql8.4主从环境搭建以及数据库备份全过程
    准备工作切换到root账户ubuntu系统执行sudo-i切换到root方便操作查看系统是否支持glibc2.28因为安装的版本比较新需要新版glic2.28redhat、centos系列使用以下命令strings/lib64/libc.so.6|grepGLIBC_2.281有输出版本号证明支持debian、ubuntu系列使用以下命令s......
  • MySQL字符集的转换
    背景介绍在使用MySQL过程中,如果字符集配置不当,可能会出现插入失败、数据乱码、索引失效、数据丢失、查询不到期望结果等一系列使用异常的情况。因此,熟练掌握MySQL字符集和比较规则的配置方法,并在此基础上了解MySQL字符集与比较规则的核心逻辑,才能从源码和实现层面上理解,为......
  • 一篇文章教会使用MySQL数据库
    1.MySQL的命令1.1操作数据库1.1.1mysql服务的启动和停止netstopmysqlnetstartmysql1.1.2增加新用户grant权限on数据库.*to用户名@登录主机identifiedby“密码”权限:select,insert,update,delete数据库:数据名后面的.的星星可以指定表登录主机:......
  • MySQL 误操作 误修改 binlog 还原恢复实战 超详细
    硬盘有价,数据无价,数据库执行,谨慎操作!binlog日志还原不适用于直接删表删库的误操作!目录实战恢复1、导出相关时间binlog数据2、找到对应语句以及pos区间3、导出改动区间的sql4、将binlog导出的sql转换为逆向修复sql        1、从上面binlog日志可以看出  开头......
  • 基于php+mysql开发制作的全景在线制作网站源码系统 附带完整的安装代码包以及搭建部署
    系统概述本系统是一款集全景图片上传、编辑、展示于一体的综合性解决方案。采用PHP作为后端开发语言,结合MySQL数据库的强大功能,实现了高效稳定的数据处理与存储。前端则运用了HTML5、CSS3及JavaScript等现代Web技术,确保跨浏览器兼容性和良好的用户体验。通过简洁明了的操作界......
  • java毕业设计——基于java+ssh+jsp+MySqL的大学生就业信息管理系统设计与实现(毕业论文
    基于java+ssh+jsp+MySqL的大学生就业信息管理系统设计与实现(毕业论文+程序源码)大家好,今天给大家介绍基于java+ssh+jsp+MySqL的大学生就业信息管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进......
  • MYSQL中 IF() IFNULL() NULLIF() ISNULL() 函数的使用
    IF()函数的使用IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。SELECTIF(TRUE,'A','B');--输出结果:ASELECTIF(FALSE,'A','B');--输出结果:BIFNULL()函数的使用IFNULL(expr1,expr2),如果expr1的值为null,则返回......
  • MySQL事物原理
    事务    在MySQL服务中,系统的主线程负责监听连接,而多个连接线程负责处理连接。这时候多个SQL语句操作数据库,就会出现事务多并发,交叉处理。比如银行存钱后再取钱,如果存钱的中途撤销操作,但取钱操作已经完成等等。        事务是一个工作单元,它由一系列操作组成......
  • MySQL show processlist说明
    showprocesslist和showfullprocesslistprocesslist命令的输出结果显示了有哪些线程在运行,不仅可以查看当前所有的连接数,还可以查看当前的连接状态帮助识别出有问题的查询语句等。如果是root帐号,能看到所有用户的当前连接。如果是其他普通帐号,则只能看到自己占用的连接。showp......
  • MySQL基础
    MySQL基础今日目标:完成MySQL的安装及登陆基本操作能通过SQL对数据库进行CRUD能通过SQL对表进行CRUD能通过SQL对数据进行CRUD1,数据库相关概念以前我们做系统,数据持久化的存储采用的是文件存储。存储到文件中可以达到系统关闭数据不会丢失的效果,当然文件存储也有它的弊......