当前位置: 首页 > 科技观察

关于MyISAM引擎,有3点你可能不知道,

时间:2023-03-13 04:13:39 科技观察

是有道理的。虽然InnoDB引擎在互联网公司中被广泛使用,但是MyISAM引擎的特点也有各自的使用场景。今天松哥就来给大家分享一下MyISAM,这也是我们进阶MySQL的必经之路。1、MyISAMMyISAM是MySQL(5.5版本之前)默认的数据库引擎,是在早期的ISAM基础上改进而来的。虽然性能优秀,但它有一个缺点:不支持事务处理(transaction)。近年来,MySQL逐渐用InnoDB取代了MyISAM。关于InnoDB和MyISAM的历史纠葛,宋哥在之前的文章(MySQL架构简介)中已经给大家介绍过了,这里不再赘述。对于每一个使用MyISAM存储引擎的数据表,数据都会存储在MYD和.MYI两个文件中。比如我新建了一个使用MyISAM存储引擎的表,命名为user,然后我们找到user表的存储位置,可以看到下面三个文件:user.frm:存储表结构信息,里面有与MyISAM引擎无关。user.MYD:存放表数据。user.MYI:存储索引信息。顺便说一句,如何查看数据库文件的位置?执行命令showglobalvariableslike"%datadir%";查看数据库文件的位置。2.特点那么MyISAM有哪些特点呢?接下来,我们将从以下几个方面进行介绍。2.1锁级别基本上,当你看到所有关于MyISAM和InnoDB区别的信息时,你都会提到这一点,因为这是它们之间最重要的区别。MyISAM是表级锁,而InnoDB支持行级锁。Lock(行级锁)也支持表级锁,但默认是行级锁。表级锁的特点是开销小,加锁速度快,不会出现死锁。但是加锁粒度大,锁冲突概率高,并发度低。行级锁的特点是开销大,加锁慢,可能会出现死锁,但它的加锁粒度小,锁冲突概率低,并发度高。根据锁的特点,表级锁更适合查询操作(混合读写操作执行效率低),而行级锁更适合并发更新和并发查询应用。因为我们今天的主角是MyISAM,所以这里不讨论行级锁的问题。表级锁在上一篇文章中已经介绍过,这里不再赘述。没看过上一篇文章的朋友可以参考:Aretable-levellocksinMySQLbad?。2.2检查/修复可以使用checktable命令检查MyISAM表是否损坏,也可以使用repairtable命令修复损坏的MyISAM表。2.3全文索引MyISAM支持全文索引,这曾经是它的一个非常重要的特性。因为从MySQL5.6开始,InnoDB支持全文索引。在此之前,只有官方存储引擎MyISAM支持全文索引。另外需要注意的是,MyISAM引擎还可以创建前缀索引(InnoDB也支持)。所谓前缀索引就是为文本的前几个字符创建一个索引(具体是创建索引时指定了多少个字符)。索引越小,查询越快。这有点类似于在Oracle中使用Left函数在字段上创建函数式索引,只不过MySQL的前缀索引在查询时会自动在内部完成匹配,不需要使用Left函数。关于前缀索引,宋大哥在介绍之前写过一篇文章:这个MySQL索引的选择性有点意思!2.4表压缩MyISAM表支持数据压缩。对于一些大的只读表,我们可以对其进行压缩,这样可以有效的节省磁盘IO。MyISAM表在压缩的时候是对单行数据进行压缩,所以我们在读取一行数据的时候不用担心解压表的问题。MyISAM表压缩的命令是myisampack。我们看一个简单的案例:先进入数据库文件目录查看当前数据库文件:然后我们强制压缩user.MYI文件:user.OLD是压缩前的文件备份,其他压缩的是压缩后的文件文件。由于松哥这里的样本数据比较小,所以压缩后的效果不是很明显(压缩后的文件反而变大了,如果数据量比较大,就不会出现这个问题)。压缩完成后,我们再对数据表进行操作,如下:可以看到,只有查询操作是可以的,其他的增删改查是不允许的,因为压缩后的用户表是一个读-只有表。2.5单表限制在MySQL5.0之前,使用MyISAM引擎的数据表,单表最大大小为4G,如果我们存储的数据超过4G,我们需要手动调整可以存储的数据行数和每行的数据大小。在建表的时候,我们可以这样修改这两个变量:CREATETABLEuser2(idINTEGERNOTNULLPRIMARYKEY,nameCHAR(18)NOTNULL)MAX_ROWS=1000000000AVG_ROW_LENGTH=32;对于已有的表,我们可以修改这两个变量如下:ALTERTABLEuser2MAX_ROWS=1000000000AVG_ROW_LENGTH=15000;当然,这是旧日历!MySQL5.0之后,单表的大小限制变成了256TB,基本够用了。3.使用场景非事务性应用(MyISAM不支持事务)只读数据(表压缩后可以使用)4.总结,过几天跟小伙伴说这么多~参考资料:https://zhuanlan.zhihu.com/p/123962424https://www.cnblogs.com/studyzy/p/4310653.html本文转载自微信公众号“江南小雨”,你可以通过以下二维码关注它。转载本文请联系江南一点鱼公众号。