浅谈一下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与PHP的基础与应用专题之数据查询

    MySQL与PHP的基础与应用专题之数据查询

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,本系列将带你掌握php与mysql的基础应用,本篇从数据的查询开始
    2022-02-02
  • MySQL系列之十一 日志记录

    MySQL系列之十一 日志记录

    这篇文章主要介绍了MySQL日志文件详解,本文分别讲解了错误日志、二进制日志、通用查询日志、慢查询日志、Innodb的在线redo日志、更新日志等日志类型和作用介绍,需要的朋友可以参考下
    2021-07-07
  • MySql5.5忘记root密码怎么办

    MySql5.5忘记root密码怎么办

    使用mysql5.5,突然root密码忘记,怎么也登录不了,很急人,该怎么解决呢?下面通过本文给大家介绍mysql5.5忘记root密码的解决办法,需要的朋友参考下吧
    2016-01-01
  • MySQL备份时排除指定数据库的方法

    MySQL备份时排除指定数据库的方法

    这篇文章主要介绍了MySQL备份时排除指定数据库的方法的相关资料,需要的朋友可以参考下
    2016-03-03
  • MySQL判断空值的三种方法

    MySQL判断空值的三种方法

    在创建表时,可以指定的列是否可以不包含值,如果在一个列不包含值,则其称其为空值NULL,NULL一个特殊值,代表缺失的值或者不适用的情况,表示未知数据,本文给大家介绍了MySQL判断空值的三种方法,需要的朋友可以参考下
    2024-03-03
  • mysql缺少my.ini文件的解决方法

    mysql缺少my.ini文件的解决方法

    使用的这么长时间的mysql,有一天我突然需要使用mysql 的配置文件my.ini时发现没有这个文件并且这个文件不是被隐藏了,所以本文给大家介绍了mysql缺少my.ini文件的解决方法,需要的朋友可以参考下
    2023-12-12
  • GROUP_CONCAT的用法

    GROUP_CONCAT的用法

    GROUP_CONCAT的用法...
    2006-12-12
  • MySQL存储过程中使用WHILE循环语句的方法

    MySQL存储过程中使用WHILE循环语句的方法

    这篇文章主要介绍了MySQL存储过程中使用WHILE循环语句的方法,实例分析了在MySQL中循环语句的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • mysql严格模式Strict Mode详细说明

    mysql严格模式Strict Mode详细说明

    使用mysql严格模式可以使数据更加安全严格,缺点是减少了对空数据入库的兼容性,下面这篇文章主要给大家介绍了关于mysql严格模式Strict Mode详细说明的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • MySQLexplain之possible_keys、key及key_len详解

    MySQLexplain之possible_keys、key及key_len详解

    这篇文章主要介绍了MySQLexplain之possible_keys、key及key_len的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08

最新评论