您的位置:首页 > 数据库 > MySQL

mysql性能优化之一(引擎的选择)

2012-03-11 13:53 204 查看
没错,选的就是InnoDB引擎。

在mysql的用户中,使用最多的引擎应该算MyISAM和InnoDB了。不可否认,MyISAM为mysql的发展做过很大的贡献,也是5.5之前的默认引擎,很多人接触mysql也是从MyISAM开始的。但是,在web时代,MyISAM已逐渐成为了浮云。
MyISAM是基于ISAM理论发展起来的一个引擎,ISAM全称为Indexed Sequential Access Methed,中文翻译为“索引顺序存取方法”,它是一种专为磁盘存取设计的文件组织方式。由于磁盘是以盘组、柱面、磁道三级地址存取的设备,ISAM文件在存储的时候创建主索引,柱面索引,磁道索引,在读取的时候,先从主索引出发找到相应的柱面索引,再从柱面索引找到记录所在柱面的磁道索引,最后从磁道索引找到记录所在磁道的第一个记录的位置,由此出发在磁道上进行顺序查找。

MyISAM有几个比较大的缺点:

1,表锁机制,所以在更新和查询数据并发高的时候,性能很差,这跟ISAM文件的设计理念有点相似,ISAM数据文件的设计理念就是先假设数据的查询次数要远远高于更新的次数,但是在web项目中,我们经常遇到不仅查询次数频繁,更新也频繁的问题,这时,MyISAM的处理性能就显得很差。当然,如果是查询多而更新少的项目,MyISAM性能也还算可以,因为查询时用到的是共享锁,大家可以一起查询,所以性能还可以;而更新时由于是独享锁,MyISAM又是表锁机制,所以更新某个表的数据时其他该表的操作请求就必须排队等待了,所以性能很差。

2,内存管理机制,MyISAM引擎是将内存管理交给系统管理,并且只是缓存索引而已,没缓存数据,数据依然必须从磁盘中读取。另外系统管理内存本身也有一些缺陷,比如系统一般是4k一个page,比较浪费内存空间。

3,在功能方面,MyISAM不支持事物,外键等。
选择InnoDB引擎的理由也是很充分的:

1,行锁机制,因为在web项目中,经常有大量的读写并发,而行锁机制可以让A用户在修改T表的某一条记录时,B用户同时也可以修改T表的另一条记录,极大的提高写并发。

2,InnoDB有自己的内存管理机制,可以把索引和数据都缓存在内存中,减少磁盘IO次数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: