浅谈一下MyISAM和InnoDB存储引擎的区别

 更新时间:2023年04月28日 09:58:58   作者:魏天乐大帅哥  
这篇文章主要介绍了MyISAM和InnoDB存储引擎的区别,存储引擎是MySQL中特有的一个术语,其它数据库中没有,实际上存储引擎是一个表存储/组织数据的方式,今天就跟小编来看看MyISAM和InnoDB存储引擎的区别,需要的朋友可以参考下

前言

MyISAM和InnoDB是使用MySQL最常用的两种存储引擎,在5.5版本之前默认采用MyISAM存储引擎,从5.5开始采用InnoDB存储引擎。

在这里插入图片描述

存储引擎

存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。

MySQL的核心就是插件式存储引擎,支持多种存储引擎

show engines; //查看存储引擎

在这里插入图片描述

在这里插入图片描述

关于数据库的大致架构和基础操作,这里不过多介绍;

区别

说区别之前说一下他俩的索引底层都是BTREE+ , B+树的数据结构维护索引和数据(m是非聚簇索引,i是聚簇索引,这点注意下)

事务

  • InnoDB支持事务,具有安全性和完整性,系统容灾性强,且通过使用多版本并发控制MVCC来获得高并发性; 
  • MyISAM不支持事务; 系统容灾性弱;

外键

  • InnoDB支持外键
  • MyISAM不支持外键

因此把一个有外键的InnoDB表单转换成MyISAM表单会失败;

表单的存储

通过使用不同存储引擎建立表单查看生成的对应存储文件,发现除了双方共有的 .frm存储表属性外:

  • InnoDB存储引擎表单独存放到一个独立的IBD文件中;(索引和数据放在了一起)–>聚簇索引–>通过主键索引效率高; 普通键进行索引可能需要回表;
  • MyISAM存储引擎表单MYDMYI两部分组成,其中MYD(MYData)用来存放数据文件,而MYI(MYIndex)则用来存放索引文件–>非聚簇索引–>数据存放的是指针,不需要回表,主键索引和普通键索引分开了;

数据查询效率

  • InnoDB不支持全文索引,而 MyISAM 支持全文索引,查询效率上 MyISAM更高;
  • InnoDB不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而 MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;

数据更新效率

InnoDB的内部优化,包括**磁盘预读(**从磁盘读取数据时采用可预测性读取),自适应哈希(自动在内存中创建hash索引以加速读操作)等, 且能够加速插入操作的插入缓冲区。所以比MyISAM在数据更新能力上更优;

如何选择

  1. 看设计的业务是否需要支持事务,需要–InnoDB;不需要–MyISAM;
  2. 如果select读操作频繁,用MyISAM; 如果数据更新操作使用频繁操作用InnoDB
  3. 考虑系统容灾能力,MyISAM更不容易恢复,InnoDB容易恢复;

既然MySQL5.5版本之后默认了InnoDB,不知道用什么那就InnoDB,跟着主流走不会错;

到此这篇关于浅谈一下MyISAM和InnoDB存储引擎的区别的文章就介绍到这了,更多相关MyISAM和InnoDB存储引擎内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql定时自动备份数据库的方法步骤

    mysql定时自动备份数据库的方法步骤

    我们都知道数据是无价,如果不对数据进行备份,相当是让数据在裸跑,本文就介绍一下如何给mysql定时自动备份数据,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • mysql截取json对象特定数据的场景示例详解

    mysql截取json对象特定数据的场景示例详解

    这篇文章主要为大家介绍了mysql中截取json对象特定数据的场景示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • mysql父子集查询(根据父级查询所有子集)

    mysql父子集查询(根据父级查询所有子集)

    某些场景可能需要维护一些有父子关系的数据,本文主要介绍了mysql父子集查询(根据父级查询所有子集),具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • MySQL计算两个日期相差的天数、月数、年数

    MySQL计算两个日期相差的天数、月数、年数

    这篇文章主要介绍了MySQL计算两个日期相差的天数、月数、年数,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • MySQL快速插入一亿测试数据

    MySQL快速插入一亿测试数据

    本文主要介绍了MySQL快速插入一亿测试数据,有时候测试需要大量的数据,需要的朋友们下面随着小编来一起学习学习吧
    2021-06-06
  • 从数据库中取出最近三十天的数据并生成柱状图

    从数据库中取出最近三十天的数据并生成柱状图

    从数据库中取出最近三十天的数据并生成柱状图的代码,需要的朋友可以参考下。
    2011-05-05
  • log引起的mysql不能启动的解决方法

    log引起的mysql不能启动的解决方法

    今天服务器挂了原来服务器的硬盘进行了数据转移 弄到mysql的时候发现里面log日志文件高达900MB
    2008-07-07
  • CentOS7.5 安装MySql的教程

    CentOS7.5 安装MySql的教程

    这篇文章主要介绍了CentOS7.5 安装MySql的教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • MySQL学习笔记小结

    MySQL学习笔记小结

    这篇文章主要介绍了MySQL学习笔记小结,整体介绍了mysql的很多细节我呢体,学习优化mysql的朋友可以参考下,需要的朋友可以参考下
    2016-05-05
  • MySQL 查询速度慢的原因

    MySQL 查询速度慢的原因

    高性能MySQL需要合理的设计查询。如果查询写的很糟糕,即使表结构再合理、索引再合适,也是无法实现高性能的。
    2021-05-05

最新评论