简单了解mysql InnoDB MyISAM相关区别

 更新时间:2020年09月05日 10:38:33   作者:嘿熊  
这篇文章主要介绍了简单了解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还引入了外键约束。

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

相关文章

  • Ubuntu上安装MySQL+问题处理+安全优化

    Ubuntu上安装MySQL+问题处理+安全优化

    这篇文章主要汇总介绍了Ubuntu上安装MySQL+问题处理+安全优化的相关事项,非常的细致全面,有需要的小伙伴可以参考下
    2016-03-03
  • mysql 锁表锁行语句分享(MySQL事务处理)

    mysql 锁表锁行语句分享(MySQL事务处理)

    下面这个语句是锁定一行数据,开始读取,一直到删除后都不会有第二个人也读到这条数据
    2011-09-09
  • MySQL sql_mode修改不生效的原因及解决

    MySQL sql_mode修改不生效的原因及解决

    这篇文章主要介绍了MySQL sql_mode修改不生效的原因及解决,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-05-05
  • spark rdd转dataframe 写入mysql的实例讲解

    spark rdd转dataframe 写入mysql的实例讲解

    今天小编就为大家分享一篇spark rdd转dataframe 写入mysql的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • 新手必学的mysql外键设置方式

    新手必学的mysql外键设置方式

    MySQL外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列,一个表可以有一个或多个外键,下面这篇文章主要给大家介绍了关于mysql外键设置的相关资料,需要的朋友可以参考下
    2021-12-12
  • MySQL学习之日期函数的用法详解

    MySQL学习之日期函数的用法详解

    本文将学习MySQL的日期函数,在前面章节的练习中,我们就利用过NOW()函数来获取过当前系统时间,用DATEDIFF函数来计算日期相差的天数,接下来我们就系统的学习一下 日期函数
    2022-08-08
  • MySQL表的碎片整理和空间回收的方法

    MySQL表的碎片整理和空间回收的方法

    本文主要介绍了MySQL表的碎片整理和空间回收的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • macOS下mysql 8.0.16 安装配置图文教程

    macOS下mysql 8.0.16 安装配置图文教程

    这篇文章主要为大家详细介绍了macOS下mysql 8.0.16 安装配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • MySQL 事务autocommit自动提交操作

    MySQL 事务autocommit自动提交操作

    这篇文章主要介绍了MySQL 事务autocommit自动提交操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • MySQL占用内存过大解决方案图文详解

    MySQL占用内存过大解决方案图文详解

    最近无意中在任务管理器发现MySQL内存占用达到700+M,所以下面这篇文章主要给大家介绍了关于MySQL占用内存过大的完美解决方案,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-09-09

最新评论