设为首页 加入收藏

TOP

数据库的MyISAM、InnoDB引擎的特点、适用的生产业务场景等介绍
2018-05-23 09:17:50 】 浏览:132
Tags:数据库 MyISAM InnoDB 引擎 特点 适用 生产 业务 场景 介绍

MyISAM

引擎特点:

1.不支持事务

2.只支持表级锁(数据库操作表时需要锁定整张表),锁定成本小,但并发性不高

3.读写相互阻塞,但是读读不阻塞

4.只会缓存索引,不会缓存数据

5.读取速度快(因为功能相对弱小,占用资源少,锁粒度粗)

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

7.MyISAM是MySQL5.5.5前缺省的存储引擎

适用的生产业务场景

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

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

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

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

5.以读为主的业务,例如:博客,小说网,图片信息数据库,用户数据库,商品库等业务

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

7.硬件资源比较差的机器可以使用MyISAM

小结:单一对数据库的操作都可以使用MyISAM,所谓单一就是尽量纯读或者纯写等

引擎调优:

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

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

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

4.尽量顺序操作让insert操作都写入尾部,减少阻塞

5.分解时间长的操作,降低单个操作的阻塞时间

6.降低并发数(减少对MySQL访问),某些高并发场景通过应用队列机制Q队列

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

8.MyISAM的count只有在全表扫描的时候特别高效,带有其他条件的count都需要进行实际的数据访问

9.把主从同步的主库使用innodb,从库使用MyISAM引擎(不推荐,但有人这么使用)

InnoDB

MySQL5.5.5以后的默认存储引擎为InnoDB

引擎特点:

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

2.行级锁定(更新时一般是锁定当前行):通过索引实现。全表扫描仍然会是表锁。

3.读写阻塞跟事务隔离级别相关

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

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

6.所有Secondary Index都会保存主键信息

7.支持分区,表空间,类似Oracle数据库

8.支持外键约束,5.5以前不支持全文索引,以后支持了

9.和MyISAM 引擎相比,对硬件资源要求较高

小结:事务,行级锁,外键

适用的生产应用场景:

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

2.行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成(如果没有索引,还是全表锁,那么并发性还是不高)

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

4.数据一致性要求较高的业务

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

6.与MyISAM引擎相比, InnoDB引擎更消耗资源,速度没有MyISAM快

引擎调优:

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

2.避免使用全表扫描,因为会使用表锁

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

4.在大批量小插入的时候,尽量自己控制事务而不要使用autocommit自动提交。

5.避免主键更新,因为这会带来大量的数据移动

有关MySQL引擎常见企业面试题:

一、MySQL有哪些存储引擎,各自有什么特点和区别?

常见的存储引擎有MyISAM,InnoDB,Memory等

二、生成环境中应如何选用MySQL的引擎?

读多写少用MyISAM,硬件配置不高使用MyISAM。

支持事务,支持外键需要使用InnoDB。

在一般的既有读又有写的业务中,建议使用InnoDB引擎,

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Mysql如何实现让别人远程访问自己.. 下一篇php操作mysql,1分钟内插入百万数..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目