MySQL中MyISAM与InnoDB的区别

时间:2021-09-26 07:33:43

MySQL中MyISAM与InnoDB的区别

一、存储引擎

存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。

二、MySQL中的存储引擎

在创建表到时候可以在最后通过engine=…或type=…来指定所要使用到引擎。也可以使用show table status from DBname来查看指定表的引擎。
修改存储引擎,可以用命令Alter table tableName engine =engineName

1)MyISAM:这种引擎是mysql最早提供的。这种引擎又可以分为静态MyISAM、动态MyISAM 和压缩MyISAM三种。但是,不管是何种MyISAM表,目前它都不支持事务,行级锁和外键约束的功能。

2)MyISAM Merge引擎:这种类型是MyISAM类型的一种变种。合并表是将几个相同的MyISAM表合并为一个虚表。常应用于日志和数据仓库。

3)InnoDB:InnoDB表类型可以看作是对MyISAM的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能。

4)memory(heap):这种类型的数据表只存在于内存中。它使用散列索引,所以数据的存取速度非常快。因为是存在于内存中,所以这种类型常应用于临时表中。

5)archive:这种类型只支持select 和 insert语句,而且不支持索引。常应用于日志记录和聚合分析方面。

比较常见的就是MyISAM和InnoDB这两种

三、MyISAM和InnoDB及区别

1.MySQL默认使用的是MyISAM(5.5版本之后貌似是默认InnoDB)
2.MyISAM不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。
3.而InnoDB支持事务,也支持外键。InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。
4.锁机制方面:InnoDB支持数据行锁定,MyISAM不支持行锁定,只支持锁定整个表。即 MyISAM同一个表上的读锁和写锁是互斥的,MyISAM并发读写时如果等待队列中既有读请求又有写请求,默认写请求的优先级高,即使读请求先到,所以 MyISAM不适合于有大量查询和修改并存的情况,那样查询进程会长时间阻塞。因为MyISAM是锁表,所以某项读操作比较耗时会使其他写进程饿死

InnoDB支持的方面更多一点,在一些特定场景,比如需要事务,需要外键,有大量修改操作的情况下,InnoDB是非常强大的。

而在读多写少,追求稳定性、拓展性、高可用性来说的话,MyISAM是首选,当然,现在的框架也可以弥补它的些许不足。