MyISAM和InnoDB引擎

Mysql IT敢客 2年前 (2016-11-03) 8773次浏览 已收录 0个评论 扫描二维码

MyISAM

MyISAM 引擎是 MySQL 关系数据库管理系统的默认存储引擎(5.5.xx 版本之前),这种 MySQL 表存储结构从就的 ISAM 代码扩展出许多有用的功能,在新版的 MYSQL 中 InnoDB 引擎由于对事物参照的完整性,已经更高并发性等优点开始逐渐取代 MyISAM 引擎

InnoDB 引擎

InnoDB 引擎是 MySQL 数据库另外一个重要的引擎,正成为目前 MySQL 数据库所发行的新版的标准,被包含在所以二进制安装包里,和其他的引擎相比, InnoDB 引擎的优点时兼容 ACID 的事务,已经参数完整性(即支持外键)。

MyISAM 引擎特点:

1、不支持事物(事物是指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败)

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

3、读写相互阻塞。不仅会在写入的时候阻塞读取,MyISAM 还会在读取的时候阻塞写入,但是读本身不会阻塞其他读取。

4、只缓存索引。MyISAM 可以通过 key_buffer_size 缓存索引,以大大提高访问性能,减少磁盘 IO,但是这个缓存区只会缓存索引,不会缓存数据

5、读取速度快,占用资源相对少

6、不支持外键约束,但是支持全文索引

7、MyISAM 引擎是 mysql5.5.xx 前的默认存储引擎。

MyISAM 应用场景:

1、不需要支持事务的业务。如银行转账等肯定不支持

2、一般用于读数据较多的引用。读写都频繁的场景不适用,读多或者写多都可以。

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

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

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

6、对数据一致性要求不是很高的业务

7、硬件资源相对差的服务器可以使用 MyISAM

MyISAM 引擎调优精要

1、设置合适的索引(缓存机制)

2、调整读写优先级,根据实际需求确保重要操作更优先执行

3、启用延迟插入改善大批量写入性能(降低写入频繁,尽可能多条一次性写入)

4、尽量顺序操作让 insert 数据都写入到尾部,减少阻塞

5、分解大的操作,减低单个操作的阻塞时间

6、减低并发数(减少 mysql 访问),某些高并发场合通过应用进行排队队列机制

7、对于相对静态(更改不频繁)的数据库数据,充分利用 query cache 或者 memcached 缓存服务可以极大的提高访问效率

8、可以把主从同步中的主库使用 innodb,从库使用 MyISAM

###########################################################################################

###########################################################################################

###########################################################################################

InnoDB 引擎特点

1、支持事务。支持 4 个事务隔离级别,支持多版本读。

2、行级锁定(更新是一般是锁定当前行).通过索引实现,全表扫描仍然会使表锁。注意间隙锁的影响

3、读写阻塞与事务隔离级别相关

4、具有非常高效的缓存特性,能缓存索引,也能缓存数据

5、整个表和主键以 cluster 方式存储,组成一颗平衡树

6、所有 secondary index 都会保存主键信息

7、支持分区,表空间,类似 oracle 数据库

8、支持外键约束,不支持全文索引 5.5 以前。5.5 之后支持

InnoDB 引擎应用场景

1、需要事务支持的业务(具有较好的事务特性)

2、行级锁定对高并发有很好的适应能力,但是需要确保查询是通过索引完成

3、数据读写以及更新较为频繁的场景,如 BBS/SNS/微博、微信等等

4、数据一致性要求较高的业务。如银行转账等

5、硬件设备内存较大,可以利用 InnoDB 较好的缓存功能来提供内存利用率,尽可能减少磁盘 IO

6、相比 MyISAM 引擎,innodb 引擎更加消耗资源,速度没有 MyISAM 引擎快

InnoDB 引擎调优精要

1、主键尽可能小,避免给 Secondary index 带来过大的空间负担

2、避免全表扫描,因为全表扫描还是会使用表锁

3、尽可能缓存索引的数据,提高响应速度,减少磁盘 IO 消耗

4、在大批量小插入的时候,尽量自己控制事务而不要使用 autocommit 自动提交。有开关可以控制提交方式

5、合理设置 innodb_flush_log_at_trx_commit 参数值,不要过度追求安全

6、避免主键更新,因为这会带来大量数据移动


IT 敢客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MyISAM 和 InnoDB 引擎
喜欢 (155)
[313176056@qq.com]
分享 (0)
IT敢客
关于作者:
“我所做的一切都是为了方便我的生活~~~“
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址