数据库的引擎

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MDreamlove/article/details/80398483

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引擎,

展开阅读全文

没有更多推荐了,返回首页