一、MyISAM引擎特点
MyISAM引擎是MySQL5.5版本(不含)之前的数据库所默认的数据表引擎。每一个采用MyISAM引擎的数据表在实际存储中都是由三个文件组成,分别是frm文件,MYD文件和MYI文件,文件后缀为上述三个,文件名与数据表名相同。一个典型的MyISAM类型的数据表如下:frm文件保存表的结构,MYD保存表的数据,MYI保存表的索引文件,MYD和MYI与MyISAM引擎有很深的关联。
除此之外,MyISAM引擎的特点还有:
1、不支持事务。
2、表级锁定。 即发生数据更新时,会锁定整个表,以防止其他会话对该表中数据的同时修改所导致的混乱。这样做可以使得操作简单,但是会减少并发量。
3、读写互相堵塞。 在MyISM类型的表中,既不可以在向数据表中写入数据的同时另一个会话也向该表中写入数据,也不允许其他的会话读取该表中的数据。只允许多个会话同时读取该数据表中的数据。
4、只会缓存索引,不会缓存数据。 所谓缓存,就是指数据库在访问磁盘数据时,将更多的数据读取进入内存,这样可以使得当访问这些数据时,直接从内存中读取而不是再次访问硬盘。MyISAM可以通过key_buffer_size缓存索引,以减少磁盘I/O,提升访问性能。但是MyISAM数据表并不会缓存数据。
5、读取速度较快,占用资源较少。
6、不支持外键约束。
7、支持全文索引。
二、MyISAM引擎适用场景
由MyISAM的特性,我们就可以简单的列举MyISAM引擎适用场景了。
1、不需要事务支持的场景。
2、读取操作比较多,写入和修改操作比较少的场景。
3、数据并发量较低的场景。
4、硬件条件比较差的场景。
5、在配置数据库读写分离场景下,MySQL从库可以使用MyISAM索引。
三、MyISAM引擎调优思路
如果我们确定了业务场景中要使用MyISAM引擎,那么我们可以通过以下方式,来尽可能的避免MyISAM引擎的问题,以使得我们业务场景下数据库性能更加优秀。
1、建立合适的索引。
2、调整读写优先级,根据实际情况使得在高并发场景下重要的操作先执行。
3、启用延迟插入改善大批量写入性能。
4、在insert插入新数据时,尽量让新数据插入到尾部。
5、分解子查询过多的操作。
6、降低业务场景下的并发操作。
7、对于更改不频繁的数据表,使用query cache和memacache缓存以提升访问效率。