存在即合理,虽然在互联网公司中 InnoDB 引擎使用较多,但是 MyISAM 引擎的特性自有它自己的使用场景,今天松哥就来和大家捋一捋 MyISAM,这也是我们 MySQL 进阶必经之路。
1.MyISAM
MyISAM 是 MySQL 的默认数据库引擎(5.5版之前),由早期的 ISAM 所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。最近几年,MySQL 逐渐使用 InnoDB 代替了 MyISAM,关于 InnoDB 和 MyISAM 的历史纠葛,松哥在上篇文章中(MySQL 体系架构简介)已经和大家介绍过了,这里就不再赘述。
每一个使用 MyISAM 存储引擎的数据表,数据都会存放在两个文件中 .MYD 和 .MYI,例如我新建一个使用了 MyISAM 存储引擎的表,名为 user,然后我们找到 user 表的存放位置,可以看到如下三个文件:
user.frm:存储表结构信息,这个和 MyISAM 引擎没有关系。
user.MYD:存放表数据。
user.MYI:存放索引信息。
题外话,如何查看数据库文件位置?
执行命令 show global variables like "%datadir%"; 可以查看数据库文件位置。
2.特性
那么 MyISAM 都有哪些特性呢?接下来我们就从如下几个方面来介绍下。
2.1 锁级别
基本上大家看到所有讲 MyISAM 和 InnoDB 区别的资料,都会提到这一点,因为这是它俩最为重要的区别,MyISAM 是表级锁(table-level locking),而 InnoDB 支持行级锁(row-level locking),也支持表级锁,但是默认情况下是行级锁。
表级锁的特点是开销小,加锁快,不会出现死锁,但是锁定粒度较大,发生锁冲突的概率高,而且并发度也低。
行级锁的特点是开销大,加锁慢,有可能会出现死锁,但是它的锁定粒度小,发生锁冲突的概率低,并发度也高。
根据锁的特点来看,表级锁更适合于查询操作(读写混合操作执行效率较低),而行级锁则更适合并发更新、并发查询的应用,因为我们今天的主角是 MyISAM,所以我们这里就先不讨论行级锁的问题,表级锁松哥在上篇文章中也已经介绍过了,这里就不再赘述。没看上篇的小伙伴可以
转载请注明:IT运维空间 » 运维技术 » 关于 MyISAM 引擎,你可能不知道的三件事
发表评论