专注Java教育14年 全国咨询/投诉热线:444-1124-454
星辉LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 浅谈MyISAM存储引擎

浅谈MyISAM存储引擎

更新时间:2021-01-15 17:32:40 来源:星辉 浏览689次

MyISAM是曾经的默认MySQL 插件式存储引擎,它是在 Web、数据仓储和其他应用环境下常使用的存储引擎。MyISAM是基于ISAM引擎发展起来的,增加了许多有用的扩展。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参照完整性与并发违规处理机制,后来就逐渐取代MyISAM存储引擎

 

一、MyISAM的存储方式

MyISAM是基于非聚簇索引进行存储的。基于MyISAM存储引擎的表支持3种不同的存储格式。包括静态型、动态型和压缩型。

1.静态型:就是定义的表列的大小是固定(即不含有:xblob、xtext、varchar等长度可变的数据类型),这样mysql就会自动使用静态myisam格式。

 

使用静态格式的表的性能比较高,因为在维护和访问的时候以预定格式存储数据时需要的开销很低。但是这高性能是有空间换来的,因为在定义的时候是固定的,所以不管列中的值有多大,都会以最大值为准,占据了整个空间。

 

2.动态型:如果列(即使只有一列)定义为动态的(xblob, xtext, varchar等数据类型),这时myisam就自动使用动态型,虽然动态型的表占用了比静态型表较少的空间,但带来了性能的降低,因为如果某个字段的内容发生改变则其位置很可能需要移动,这样就会导致碎片的产生。随着数据变化的怎多,碎片就会增加,数据访问性能就会相应的降低。

 

3.压缩型:如果在这个数据库中创建的是在整个生命周期内只读的表,则这种情况就是用myisam的压缩型表来减少空间的占用。

MyISAM提供了大量的特性,包括全文索引,压缩,空间函数,延迟更新索引键等。进行压缩后的表是不能进行修改的,但是压缩表可以极大减少磁盘占用空间,因此也可以减少磁盘IO,从而提供查询性能。

 

二、MyISAM的特点

1.不支持事务。

2.表级锁定,数据更新时锁定整个表:其锁定机制是表级锁定,这虽然可以让锁定的实现成本很小但是也同时大大降低了其并发性能。

3.读写互相阻塞:不仅会在写入的时候阻塞读取,myisam还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读。

4.只会缓存索引:myisam可以通过key_buffer_size缓存索引,以大大提高访问性能,减少产品IO,但是这个缓存区只会缓存索引,而不会缓存数据。

5.读取速度较快,占用资源相对少。

6.不支持外键约束,但支持全文索引。

 

 

三、MyiSAM适用的生产业务场景,

1 、不需要事务支持的业务(例如转账就不行)。

2 、一般为读数据比较多的应用,读写都频繁场景不适合,读多或者写多的都适合。

3 、读写并发访问相对较低的业务(纯读纯写高并发也可以)(锁定机制问题)

4 、数据修改相对较少的业务(阻塞问题)。

5 、以读为主的业务,例如:数据库系统表、www, blog ,图片信息数据库,用户数据库,商品库等业务。

6 、对数据一致性要求不是非常高的业务(不支持事务)。

7 、硬件资源比较差的机器可以用 MyiSAM (占用资源少)

 

MySQL数据库中除了MyISAM存储引擎,还有目前MySQL的默认存储引擎InnoDB,与MyISAM不同的是,InnoDB专注事务,而MyISAM专注性能,至于对InnoDB存储引擎的介绍,小伙伴们请移步到本站的MySQL教程,里面对InnoDB有很详细的讲解。

 

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>