Mysql InnoDB和MyISAM区别原理解析

 更新时间:2020年10月23日 11:46:06   作者:嘿熊  
这篇文章主要介绍了Mysql InnoDB和MyISAM区别原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

mysql支持很多表类型的表(即存储引擎),如myisam、innodb、memory、archive、example等。每种存储引擎都有自己的优点和缺点,充分的理解每种存储引擎,有助于合理的使用它们。有人认为在同一个数据库中使用多种存储引擎很影响性能,其实这是一种十分错误的想法。实际上,除非是非常简单的数据库,否则的话,只使用一种存储引擎,对应用程序的性能来说是一个十分糟糕的行为。对数据库了解的人会根据每张表的作用不同来选择适当的存储引擎,这才是正确的做法。

前面说过mysql的存储引擎很多,但是我个人在工作中运用最多的存储引擎有两个,一个是InnoDB,一个是MyISAM。我这里就聊聊这两个存储引擎,并比较下两者之间的区别。

一、MyISAM

MyISAM现在为mysql的默认存储引擎,如果在建表的时候,没有指定表类型,mysql就会默认使用MyISAM。MyISAM有一个很多人认为很重要,然而我却觉得没什么卵用的特性,那就是MyISAM表示独立于操作系统之外的。通俗点说就是你可以很轻松的将MyISAM表从windows移植到linux或者从linux移植到windows。这确实是个优点,可是哪个技术主管会有在决定用了一种操作系统一段时间后又要换服务器的操作系统的脑残行为,所有我认为这个优点没有什么实际的意义。

MyISAM存储引擎是mysql组件中非常重要的一部分,在mysql中可以创建3种MyISAM格式的表——静态、动态和压缩。格式不需要单独指定,mysql会根据表结构自动选择最合适的格式。

1、MyISAM静态

如果表的每个字段的数据类型的定义都是使用静态的(如char),mysql就会自动使用静态MyISAM格式,这种类型格式的表的性能是很高的,也就是查询更新用的时间很少,但要知道这是在牺牲空间为代价。因为每一列都要分配最大的空间,即使有部分空间没有用到,这就使得静态的表所占的空间会比较大。

2、MyISAM动态

如果表的每个字段的数据类型的定义都是使用动态的(如varchar),mysql就会自动使用动态MyISAM格式,这种类型格式的表的性能会有所下降,但是它的空间占有要比静态的少很多。

3、MyISAM压缩

如果有一张表在设计之初只赋予了它读的使命,就可以用MyISAM压缩表,在相同的配置下,它的性能是最快的。

二、InnoDB

InnoDB是一个事务型存储引擎,它默认支持事务。因此,在对数据完整度有较高要求的项目中,都是采用InnoDB作为存储引擎,比如跟银行相关的项目。InnoDB还引入行级锁定。其他表类型都是全表锁定,意思就是说,在一个用户要修改一张表中,自己那一行的某个信息的时候,数据库会先锁定整张表,其他用户对这张表无法进行操作,这就是全表锁定。行级锁定就不一样了,只锁定自己要修改的那一行的,也就是说其他人对表还可以进行操作,只是不能操作被锁定的那一行的数据了。好处显而易见,在速度上更快了,特别适合处理多重并发的更新请求。

InnoDB还引入了外键约束。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 更新至MySQL 5.7.9的详细教程

    更新至MySQL 5.7.9的详细教程

    文章介绍了MySQL 5.7.9 GA版本的更新过程和一些常见警告的解决方法,包括设置`secure-file-priv`参数、跳过SSL连接、使用`skip-networking`代替`skip-name-resolve`等,感兴趣的朋友一起看看吧
    2025-02-02
  • MySQL一些常用高级SQL语句详解

    MySQL一些常用高级SQL语句详解

    对 MySQL 数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。例如只取 10 条数据、对查询结果进行排序或分组等等,今天就给大家分享MySQL一些常用高级SQL语句,感兴趣的朋友一起看看吧
    2022-06-06
  • Ubuntu搭建Mysql+Keepalived高可用的实现(双主热备)

    Ubuntu搭建Mysql+Keepalived高可用的实现(双主热备)

    本文主要介绍了Ubuntu搭建Mysql+Keepalived高可用的实现(双主热备),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • MySQL专用服务器自动配置参数的实现

    MySQL专用服务器自动配置参数的实现

    本文主要介绍了MySQL专用服务器自动配置参数的实现,MySQL8.0推出了专用数据库服务器自动配置参数,通过打开innodb_dedicated_server,下面就来详细的介绍一下,感兴趣的可以了解一下
    2024-09-09
  • Mysql启动中 InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes 的问题

    Mysql启动中 InnoDB: Error: log file ./ib_logfile0 is of differe

    对于使用了默认 my.cnf(一般教程都会教你使用support-files/my-medium.cnf)的Mysql服务来说如果中间使用了innodb的话,innodb默认的log file大小是56M
    2011-05-05
  • 详解MySQL中的存取权限

    详解MySQL中的存取权限

    这篇文章主要介绍了详解MySQL中的存取权限,针对用户使用数据库权限分配的问题做出说明,需要的朋友可以参考下
    2015-07-07
  • linux下安装mysql简单的方法

    linux下安装mysql简单的方法

    这篇文章主要介绍了 linux下安装mysql简单的方法,需要的朋友可以参考下
    2017-08-08
  • Mysql 5.7从节点配置多线程主从复制的方法详解

    Mysql 5.7从节点配置多线程主从复制的方法详解

    这篇文章主要介绍了Mysql 5.7从节点配置多线程主从复制的相关资料,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • 一篇文章带你深入了解Mysql触发器

    一篇文章带你深入了解Mysql触发器

    这篇文章主要介绍了MySQL触发器概念、原理与用法,结合实例形势详细分析了mysql触发器相关概念、原理、创建、用法及操作注意事项,需要的朋友可以参考下
    2021-08-08
  • 详解Mysql基础语法的使用

    详解Mysql基础语法的使用

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。这篇文章主要介绍了Mysql基础语法的使用,需要的朋友可以参考下
    2018-07-07

最新评论