返回顶部
首页 > 资讯 > 数据库 >MySQL MyISAM 与InnoDB 的区别
  • 648
分享到

MySQL MyISAM 与InnoDB 的区别

MySQLMyISAMMySQLInnoDBMySQL存储引擎 2022-05-30 15:05:16 648人浏览 安东尼
摘要

区别: InnoDB支持事务,MyISAM不支持,对于InnoDB每一条sql语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务; InnoD

区别:

InnoDB支持事务,MyISAM不支持,对于InnoDB每一条sql语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;

InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;

InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。

MyISAM是非聚集索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

也就是说:InnoDB的B+树主键索引的叶子节点就是数据文件,辅助索引的叶子节点是主键的值;而MyISAM的B+树主键索引和辅助索引的叶子节点都是数据文件的地址指针。

InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快(注意不能加有任何WHERE条件);

那么为什么InnoDB没有了这个变量呢?

因为InnoDB的事务特性,在同一时刻表中的行数对于不同的事务而言是不一样的,因此count统计会计算对于当前事务而言可以统计到的行数,而不是将总行数储存起来方便快速查询。InnoDB会尝试遍历一个尽可能小的索引除非优化器提示使用别的索引。如果二级索引不存在,InnoDB还会尝试去遍历其他聚簇索引。
如果索引并没有完全处于InnoDB维护的缓冲区(Buffer Pool)中,count操作会比较费时。可以建立一个记录总行数的表并让你的程序在INSERT/DELETE时更新对应的数据。和上面提到的问题一样,如果此时存在多个事务的话这种方案也不太好用。如果得到大致的行数值已经足够满足需求可以尝试SHOW TABLE STATUS

Innodb不支持全文索引,而MyISAM支持全文索引,在涉及全文索引领域的查询效率上MyISAM速度更快高;PS:5.7以后的InnoDB支持全文索引了

MyISAM表格可以被压缩后进行查询操作

InnoDB支持表、行(默认)级,而MyISAM支持表级锁

InnoDB的行锁是实现在索引上的,而不是锁在物理行记录上。潜台词是,如果访问没有命中索引,也无法使用行锁,将要退化为表锁。

InnoDB表必须有主键(用户没有指定的话会自己找或生产一个主键),而Myisam可以没有

Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI

Innodb:frm是表定义文件,ibd是数据文件

Myisam:frm是表定义文件,myd是数据文件,myi是索引文件

如何选择:

是否要支持事务,如果要请选择innodb,如果不需要可以考虑MyISAM;

如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读也有写,请使用InnoDB。

系统奔溃后,MyISAM恢复起来更困难,能否接受;

Mysql5.5版本开始Innodb已经成为mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不会差。

InnoDB为什么推荐使用自增ID作为主键?

答:自增ID可以保证每次插入时B+索引是从右边扩展的,可以避免B+树和频繁合并和分裂(对比使用UUID)。如果使用字符串主键和随机主键,会使得数据随机插入,效率比较差。

innodb引擎的4大特性

插入缓冲(insert buffer),二次写(double write),自适应哈希索引(ahi),预读(read ahead)

以上就是MySQL MyISAM与InnoDB 的区别的详细内容,更多关于MySQL MyISAM与InnoDB 的资料请关注自学编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL MyISAM 与InnoDB 的区别

本文链接: https://lsjlt.com/news/9843.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL MyISAM 与InnoDB 的区别
    区别: InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务; InnoD...
    99+
    2022-05-30
    MySQL MyISAM MySQL InnoDB MySQL 存储引擎
  • MySQL中InnoDB与MyISAM的区别
    这期内容当中的小编将会给大家带来有关MySQL中InnoDB与MyISAM的区别,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。InnoDB存储引擎InnoDB,是MySQL的数据库引擎...
    99+
    2024-04-02
  • mysql中myisam与innodb的区别是什么
    MyISAM和InnoDB是MySQL数据库中两种最常用的存储引擎,它们之间有一些重要的区别: ACID属性:InnoDB支持事...
    99+
    2024-03-15
    mysql myisam innodb
  • MySQL中MyISAM与InnoDB区别是什么
    MySQL中MyISAM与InnoDB区别是什么?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!MyISAM和InnoDB的...
    99+
    2024-04-02
  • MyISAM与InnoDB的索引的区别
    相信大部分人都不太了解MyISAM与InnoDB的索引的区别,今天小编为了让大家更加了解MyISAM与InnoDB的索引的区别,给大家总结了以下内容,跟随小编一起来看看吧。B+树,它是一种非常适合用来做数据...
    99+
    2024-04-02
  • InnoDB与MyISAM有什么区别
    MySQL 中 InnoDB 和 MyISAM 区别1、事务和外键InnoDB具有事务,支持4个事务隔离级别,回滚,崩溃修复能力和多版本并发的事务安全,包括ACID。如果应用中需要执行大量的INSERT或U...
    99+
    2024-04-02
  • myisam和innodb的区别
    MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不支...
    99+
    2024-04-02
  • InnoDB和MyISAM的区别
    一、数据存放结构不同 InnoDB和MyISAM是Mysql的两种存储引擎,所谓存储引擎,就是数据文件的组织方式,其最大的不同,就是数据存储的结构和方式不一样。InnoDB采用聚簇索引来存储数据,MyISAM采用非聚簇索引。 也就是说,In...
    99+
    2023-08-21
    数据库 mysql java
  • InnoDB与MyISAM存储引擎的区别
    InnoDB和MyISAM存储引擎的不同点:InnoDB存储引擎:当前MySQL存储引擎中的主流,InnoDB存储引擎支持事务、支持行锁、支持非锁定读、支持外键。MyISAM存储引擎:MyISAM不支持事务...
    99+
    2024-04-02
  • MyISAM与Innodb数据库引擎的区别
    1、 存储结构2、 存储空间3、 可移植性、备份及恢复4、 事务支持5、 自增长6、 表锁差异7、 全文索引8、 表主键9、 表的具体行数10、 CURD操作11、 外键MySQL存储引擎中的MyISAM和...
    99+
    2024-04-02
  • MySQL 数据库中MyISAM 和 InnoDB 的区别
    首先要明白,在MySQL数据库忠中的存储引擎是基于表的,而不是基于数据库的。讲述两者区别:    InnoDB 存储引擎,主要面向 OLTP(Online Trans...
    99+
    2024-04-02
  • MySQL 中 InnoDB 和 MyISAM 的区别是什么
    今天就跟大家聊聊有关MySQL 中 InnoDB 和 MyISAM 的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  InnoDB 和 ...
    99+
    2024-04-02
  • Mysql中 InnoDB和MyISAM的区别是什么
    本篇文章给大家分享的是有关Mysql中 InnoDB和MyISAM的区别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 Inn...
    99+
    2024-04-02
  • Mysql中myisam和innodb的区别有哪些
    这篇文章给大家分享的是有关Mysql中myisam和innodb的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 (1)5点不同 1. 存储结构 &nb...
    99+
    2024-04-02
  • Mysql中MyISAM和InnoDB的区别及说明
    目录MyISAM和InnoDB的区别1. 定义2. 区别3. 使用MyISAM和InnoDB索引结构分析存储引擎作用于什么对象MyISAM和InnoDB对索引和数据的存储在磁盘上是如何体现的MyISAM主键索引与辅助索引...
    99+
    2022-12-26
    Mysql中MyISAM Mysql中InnoDB MyISAM和InnoDB的区别
  • Mysql InnoDB和MyISAM区别原理解析
    mysql支持很多表类型的表(即存储引擎),如myisam、innodb、memory、archive、example等。每种存储引擎都有自己的优点和缺点,充分的理解每种存储引擎,有助于合理的使用它们。有人认为在同一...
    99+
    2022-05-25
    Mysql InnoDB MyISAM 区别
  • mysql中innodb和myisam有什么区别
    这期内容当中小编将会给大家带来有关mysql中innodb和myisam有什么区别,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。区别:1、MyISAM不支持事务,而Inn...
    99+
    2024-04-02
  • MyISAM和InnoDB区别详解
    MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不...
    99+
    2024-04-02
  • MySQL存储引擎MyISAM与InnoDB区别总结整理
    1、MySQL默认存储引擎的变迁 在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB。 2、MyISAM与InnoDB存储引擎...
    99+
    2024-04-02
  • 简单了解mysql InnoDB MyISAM相关区别
    前言 mysql支持很多表类型的表(即存储引擎),如myisam、innodb、memory、archive、example等。每种存储引擎都有自己的优点和缺点,充分的理解每种存储引擎,有助于合理的使用它们。有人认为...
    99+
    2022-05-15
    mysql InnoDB MyISAM
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作