InnoDB和MyISAM的区别

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

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

1、MyISAMsql

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

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

一、MyISAM静态服务器

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

二、MyISAM动态性能

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

三、MyISAM压缩操作系统

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

2、InnoDB

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

InnoDB还引入了外键约束。

相关文章
相关标签/搜索