MySQL 存储引擎(MyISAM & InnoDB)

1、简介

        我们学习MySQL,如果只知道增删改查这一些基本用法,那就太浅显了,我们要熟悉MySQL存储引擎和索引具体详情,才能够更加高效使用MySQL。

2、MySQL存储引擎

        MyISAM 和 InnoDB 是Mysql里面的两个存储引擎。 在Mysql里面,存储引擎是可以自己扩展的,它的本质其实是定义数据存储的方式以及数据读取的实 现逻辑。 而不同存储引擎本身的特性 ,使得我们可以针对性的选择合适的引擎来实现不同的业务场景。 从而获得更好的性能。

        在Mysql 5.5之前,默认的存储引擎是MyISAM,从5.5以后,InnoDB就作为了默认的存储引擎。 目前大多数场景中都使用5.7版本以上,以及8.x版本,因此,我们基本上都是采用InnoDB引擎。

2.1、MyISAM 存储引擎

        MyISAM引擎的数据是通过二进制的方式存储在磁盘上,它在磁盘上体现为两个文件:

1)、.MYD 文件,D代表Data,是MyISAM的数据文件,存放数据记录;

2)、.MYI文件,I代表Index,是MyISAM的索引文件,存放索引实现机制如下图所示。

MySQL 存储引擎(MyISAM & InnoDB)_第1张图片

        因为索引和数据是分离的,所以在进行查找的时候,先从索引文件中找到数据的磁盘位置,再到数据文件中找到索引对应的数据内容。 

注:MyISAM 引擎采用的是B树数据结构,主要有以下几个特点:

1)、关键字集合分布在整颗树中;

2)、任何一个关键字出现且只出现在一个结点中,搜索有可能在非叶子结点结束;

3)、所有节点都有子节点指针,叶子结点对应的儿子节点指针为空。

4)、所有节点都保存数据,保存的数据是关键字对应数据的地址。

2.2、InnoDB 存储引擎

        在InnoDB存储引擎中,数据同样存储在磁盘上,它在磁盘上只有一个ibd文件,里面包含索引和数据。 它的整体结构如下图所示,在B+树的叶子节点里面存储了索引对应的数据,在通过索引进行检索的时候,命中叶子节点,就可以直接从叶子节点中取出行数据。

MySQL 存储引擎(MyISAM & InnoDB)_第2张图片

注:InnoDB 引擎采用的是B+树数据结构,主要有以下几个特点:

1)、所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;

2)、不可能命中非叶子结点;

3)、非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;

4)、非叶子节点只包含关键字,不包含数据,叶子节点保存所有的行数据,而且数据是按照顺序排列的,双向链表连着的,使得范围查找,排序查找,分组查找以及去重查找变得异常简单。

3、两种存储引擎对比

1)、数据索引文件:MyISAM 存储引擎数据文件和索引文件分开存储,InnoDB 存储引擎数据和文件保存在同一个文件中;

2)、事务支持:MyISAM 存储引擎不支持事务,InnoDB 存储引擎支持事务;

3)、对锁支持:MyISAM 存储引擎只支持表锁,InnoDB 存储引擎支持表锁、行锁、间隙锁等;

4)、支持外键:MyISAM 存储引擎不支持外键,InnoDB 存储引擎支持外键。

4、总结

        本文详细介绍MySQL两种存储引擎的区别和具体实现,帮助大家更加深刻理解MySQL存储引擎。

        本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

MySQL 存储引擎(MyISAM & InnoDB)_第3张图片

        

你可能感兴趣的:(Mysql,运维,mysql,数据库)