当前位置:主页 > 查看内容

MySQL常用存储引擎详解

发布时间:2021-05-09 00:00| 位朋友查看

简介:MySQL常用存储引擎详解 一、什么是存储引擎 二、掌握存储引擎的重要性 三、MySQL常用的存储引擎有哪些 四、存储引擎的特性 1、InnoDB 2、MyISAM 3、MEMORY 4、ARCHIVE 总结 一、什么是存储引擎 存储引擎是数据库的核心对于mysql来说存储引擎是以插件的形式运……

一、什么是存储引擎

存储引擎是数据库的核心,对于mysql来说,存储引擎是以插件的形式运行的。虽然mysql支持种类繁多的存储引擎,但是常用的就那么几种。

二、掌握存储引擎的重要性

数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。

当面试官问道如何优化数据库的时候还在回答添加索引和分库分表?
那么恭喜你,上一个来面试的小伙伴也是这么说的。

数据库中不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,不同的存储引擎有着不同的特性,无从判断熟弱熟强,因为它们在各自适合的应用场景下都有着自己不可撼动的地位,了解这些存储引擎的不同特性才能设计出更合理高效的数据库。

三、MySQL常用的存储引擎有哪些

MySQL 支持多种类型的数据库引擎,可分别根据各个引擎的功能和特性为不同的数据库处理任务提供各自不同的适应性和灵活性。

MySQL中的存储引擎有:InnoDBMyISAMMRG_MyISAMMemoryMergeArchiveFederatedCSVBLACKHOLEPERFORMANCE_SCHEMAFEDERATED
其中最为常用的有:InnoDBMyISAMMemoryArchive

可以通过 SHOW ENGINES 语句来显示可用的数据库引擎和默认引擎。
https://blog.csdn.net/weixin_49822811?spm=1001.2101.3001.5343
博主的MySQL版本是5.7 。如图可见默认使用的存储引擎是InnoDB
(MySQL5.1.X之前的版本中,默认的存储引擎是MyISAM。MySQL数据库5.5.8版本开始,InnoDB存储引擎是默认的存储引擎)

四、存储引擎的特性

终于讲到正题,并不是故意扯那么多,而是这些最好都要知道,如果是直接空降过来的建议从头开始看起,当然,有一定数据库存储引擎功底的小伙伴除外。

在这只讲较为常用的几种存储引擎,虽然MySQL支持的存储引擎非常多,但常用的也就这么几种。

1、InnoDB

InnoDB,是MySQL的数据库引擎之一,现为MySQL的默认存储引擎。
InnoDB是为处理巨大数据量时的最大性能而设计,InnoDB支持事务能够保证高并发下数据的安全性和一致性,支持表锁和行锁(只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁),能够在高并发的情况下大大提升数据库的效率。
(如果还有不了解事务的小伙伴可以点击传送门翻阅博主之前数据库事务的相关文章)
InnoDB一定会有主键(如果不声明主键,程序会自动生成一个隐式字段作为主键)

InnoDB底层采用B+树来进行数据存储。MySQL innodb的主键索引是簇集索引,也就是索引的叶子节点存的是整个单条记录的所有字段值,不是主键索引的就是非簇集索引也称辅助索引,非簇集索引的叶子节点存的是主键字段的值。

回表是什么意思?
就是你执行一条sql语句,需要从两个b+索引中去取数据。举个例子:
表tbl有a,b,c三个字段,其中a是主键,b上建了索引,然后编写sql语句SELECT * FROM tbl WHERE a=1
这样不会产生回表,因为所有的数据在a的索引树中均能找到
而SELECT * FROM tbl WHERE b=1
这样就会产生回表,因为where条件是b字段,那么会去b的索引树里查找数据,但b的索引里面只有a,b两个字段的值,没有c,那么这个查询为了取到c字段,就要取出主键a的值,然后去a的索引树去找c字段的数据。查了两个索引树,这就叫回表。
Innodb的辅助索引存储的是主键值而不存数据所在的地址,需要通过主键值进行回表才能找到数据所在的内存地址

2、MyISAM

MyISAM是MySQL5.5版之前的默认数据库引擎,由早期的ISAM所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。不过,在这几年的发展下,随着业务的逻辑越来越复杂,对安全性与效率方面要求越来越高,MySQL也导入了InnoDB(另一种数据库引擎),以强化参照完整性与并发违规处理机制,后来就逐渐取代MyISAM。

MyISAM不支持事务,支持表锁,其安全方面与并发效率方面远不如InnoDB,但myism中b+树的叶子节点存储的是数据的内存地址,因此不需要进行回表,所有有读取更快的说法。

3、MEMORY

MEMORY是MySQL中一类非常特殊的存储引擎,与MySQL中其他的存储引擎不同的是MEMORY存储引擎是通过内存来进行存储的只支持表级锁,表级锁会成为MEMORY存储引擎的瓶颈。其它优点和缺点都非常明显。因为是通过内存来进行存储的,所以他的效率要远远高于其他存储引擎,也就是因为通过内存来进行存储,所以数据容易受到崩溃,硬件问题或断电的影响而导致全部数据丢失,因此只能将这些表用作临时工作区或从其他表中提取数据的只读缓存,或存储一些不怎么重要与可再生的数据。

4、ARCHIVE

ARCHIVE比较特别,这个引擎只允许插入和查询,不允许修改和删除。相当于拥有只读权限和写入权限,没有修改权限和删除权限。
ARCHIVE在存储的时候会对数据进行压缩,可能别的存储引擎几个G的数据,用ARCHIVE只需要几百兆就能存下。比较适合用来做日志记录等操作。

总结

1、Innodb引擎(Mysql的默认引擎):Innodb引擎提供了对数据库ACID事务的支持。并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统,相比MyIASM引擎,Innodb修改快、支持事务、支持行锁,并发效率高,但插入、查询操作不如MyIASM。各有各的优点。

2、MyIASM引擎(原本Mysql的默认引擎):不提供事务的支持,也不支持行级锁和外键,对比InnoDB引擎,MyIASM插入快、查询快,但并发效率和安全性不及InnoDB。各有各的特长。

3、MEMORY引擎:所有的数据都在内存中,数据的处理速度快,但是安全性不高,断电则数据全部丢失。

4、ARCHIVE引擎:对数据进行压缩,只允许插入和查询操作,不允许修改和删除

;原文链接:https://blog.csdn.net/weixin_49822811/article/details/115442804
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐