我是靠谱客的博主 懵懂大神,最近开发中收集的这篇文章主要介绍mysql的几种存储引擎,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

数据库存储引擎的作用:

在mysql中,数据是采用多种不同的技术存储在内存中的,而每一项技术都使用不同的存储机制、索引技巧、索引水平来提供不同的功能与能力。
存储引擎也可以说为是数据库中的表类型,设定了存储引擎的数据表在数据存储方面、更新以及查询都会有相应的效果。
存储引擎能够保护数据,控制访问权限和快速处理事务。
存储引擎能够提供日常管理支持以优化数据库的性能。

存储引擎主要有(9种):
MyIsam , InnoDB, Memory, Blackhole, CSV, Performance_Schema, Archive, Federated , Mrg_Myisam,本文不做全部介绍,有兴趣请自行研究。

MyIsam :

1.基于ISAM数据库引擎。

2.提供ISAM里所没有的索引和字段管理等大量功能。

3.使用一种表格锁定的机制来优化多个并发的读写操作,但是需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间,否则碎片也会随之增加,最终影响数据访问性能。

4.快速读取操作,主要用于高负载的select。

5.工具:修复数据库文件的MyISAMChk工具和用来恢复浪费空间的 MyISAMPack工具。

6.不能在表损坏后恢复数据。(是不能主动恢复)。

MyISAM类型的表支持三种不同的存储结构:静态型、动态型、压缩型。
适用场景:

一、不支持事务的设计,但是并不代表着有事务操作的项目不能用MyIsam存储引擎,可以在service层进行根据自己的业务需求进行相应的控制。

二、不支持外键的表设计。

三、查询速度很快,如果数据库insert和update的操作比较多的话比较适用。

四、整天 对表进行加锁的场景。

五、MyISAM极度强调快速读取操作。

六、MyIASM中存储了表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyIASM也是很好的选择。

InnoDB

1.提供了ACID事务支持、系统崩溃修复能力和多版本并发控制的行级锁。

2.支持自增长列(auto_increment),自增长列的值不能为空,如果在使用的时候为空则自动从现有值开始增值,如果有但是比现在的还大,则直接保存这个值。

3.支持外键(foreign key) ,外键所在的表称为子表而所依赖的表称为父表。

4.该引擎在5.5后的MySQL数据库中为默认存储引擎。

适用场景

一、经常更新的表,适合处理多重并发的更新请求。

二、支持事务。

三、可以从灾难中恢复(通过bin-log日志等)。

四、外键约束。只有他支持外键。

五、支持自动增加列属性auto_increment。

Memory/HEAP

1.使用存在内存中的内容来创建表。

2.每个MEMORY表只实际对应一个磁盘文件。

3.MEMORY类型的表访问非常得快,因为它的数据是放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉。 HEAP允许只驻留在内存里的临时表格,驻留在内存里让HEAP要比ISAM和MYISAM都快,但是它所管理的数据是不稳定的,而且如果在关机之前没有进行保存,那么所有的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。HEAP表格在你需要使用SELECT表达式来选择和操控数据的时候非常有用。

4.支持散列索引和B树索引,B树索引可以使用部分查询和通配查询,也可以使用<,>和>=等操作符方便数据挖掘,散列索引相等的比较快但是对于范围的比较慢很多。

5.要求存储的数据是数据长度不变的格式,比如,Blob和Text类型的数据不可用(长度不固定的)。

6.要记住,在用完表格之后就删除表格。

适用场景:

一、那些内容变化不频繁的代码表,或者作为统计操作的中间结果表,便于高效地堆中间结果进行分析并得到最终的统计结果。

二、目标数据比较小,而且非常频繁的进行访问,在内存中存放数据,如果太大的数据会造成内存溢出。可以通过参数max_heap_table_size控制Memory表的大小,限制Memory表的最大的大小。

三、数据是临时的,而且必须立即可用得到,那么就可以放在内存中。

四、存储在Memory表中的数据如果突然间丢失的话也没有太大的关系。

Mrg_Myisam:(分表的一种方式–水平分表)

1.将MyIsam引擎的多个表聚合起来,但是他的内部没有数据,真正的数据依然是MyIsam引擎的表中,但是可以直接进行查询、删除更新等操作。

2.同一种类的数据会根据数据的时间分为多个表,如果这时候进行查询的话,就会比较麻烦,Merge可以直接将多个表聚合成一个表统一查询,然后再删除Merge表(删除的是定义),原来的数据不会影响。

Blackhole(黑洞引擎)

1.任何写入到此引擎的数据均会被丢弃掉, 不做实际存储。

2.Select语句的内容永远是空。

下面对InnoDB和MyIsam进行比较:

对比插入效率(百万级插入):(虽然速度上MyISAM快,但是增删改是涉及事务安全的,所以用InnoDB相对好很多)

对比更新:(虽然速度上MyISAM快,但是增删改是涉及事务安全的,所以InnoDB相对好很多)

参考链接:https://www.cnblogs.com/sunsky303/p/8274586.html

最后

以上就是懵懂大神为你收集整理的mysql的几种存储引擎的全部内容,希望文章能够帮你解决mysql的几种存储引擎所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部