上一次吊打各种树这篇文章 堂主柠檬带大家学习一遍数据结构中的各种树,对数据结构还不够熟悉的同学,那篇文章可以作为基础入门,我画了很多图理解起来不困难,建议回头先学习下那篇文章,更容易理解本文要讲的内容 。
文章里有提到B+树被广泛应用于MySQL数据库的索引实现,不过并未展开细说,但是呢B+树是一种重要的数据结构,常年出现在各种面试题中,这次就来一起学习下和B+树相关的MySQL索引底层实现的内容 。
面试官:简单讲讲MySQL数据库的索引实现,以及为什么这么实现?
这个面试题出现的频率非常之高,从我自己和朋友们参加的大小厂面试都有被问过这个问题,大部分人可能看过一些网上的博客能说出个一二三,如果面试官没有细问还真能混过去,但是对于细节没能真正理解的非常透彻 。
所以今天堂主柠檬就来写写这个话题,让你知其然也知其所以然 。写作目标是无论你是否学过数据结构,看完都能彻底搞懂这个问题,花5分钟来跟着学一遍看看我有没有做到吧 。
首先需要明白,数据库索引是在存储引擎层实现,常见的存储引擎有 2 种 。
InnoDB 存储引擎:
innoDB存储引擎支持事务,其设计目标是面向在线事务处理的应用,行锁设计、支持外键,默认度操作不会产生锁,从MySLQ 5.5.7版本开始,InnoDB存储引擎作为默认的存储引擎存在于MySLQ中 。MyISAM 存储引擎:
MyISAM存储引擎不支持事务,表锁设计,支持全文索引,主要面向离线事务处理的数据库应用,在InnoDB引擎成为默认引擎之前,MyISAM存储引擎一直霸占着默认存储引擎的位置,直到他被InnoDB取代,这是个悲伤的故事 。存储引擎不同,索引实现方式也不尽相同,因此,我们先约定本文讲的索引都是InnoDB存储引擎实现的B+树索引 。
MySQL架构索引由存储引擎实现,那存储引擎到底是个什么东西呢?
从我们平常使用的的角度来看,对MySQL的直观感受是命令行的各种指令,或是一个数据库管理工具比如SQLyog的界面点击操作,堂主柠檬在刚接触MySQL时就是用的SQLyon图形界面操作,就是下面这个小海豚 。
文章插图
MySQL可能是世界上最流行的开源数据库引擎,但使用基于文本的工具和配置文件管理起来可能很困难 。SQLyog提供了一个完整的图形界面,即使对于初学者来说,使用MySQL的强大功能也很简单,SQLyog直观的图形用户界面使您可以轻松管理MySQL数据库的各个方面 。不管是使用图形界面还是命令行,我们接触到的都只是客户端,MySQL作为一个软件系统的架构,存储引擎在MySQL服务端系统架构的什么位置呢?
总的来说,MySLQ系统架构分为 3 层,直接上图,看下MySQL的架构划分 。
文章插图
- 第一层:连接管理层 。MySLQ是典型的CS模型软件,所谓CS就是客户端/服务端的意思,作为一个靠网络连接的服务,必不可少的要有连接管理层,用于管理和维护MySQL服务端和客户端之间的连接、鉴权等等 。
- 第二层:这一层是MySQL的核心服务功能层,包括了查询缓存、解析器、优化器等所有跨存储引擎的功能都在这一层实现,屏蔽掉存储引擎间的差别,对上层也就是连接管理层提供统一的接口 。
- 第三层:存储引擎层就在这一层实现,负责MySQL中数据的存储和提取,这其中有我们今天的主角InnoDB存储引擎和它实现的B+树索引 。
MySQL目前支持的存储引擎种类非常丰富,可以在连接MySQL客户端,进入到命令行模式下,输入如下命令查看当前版本MySQL提供的所有存储引擎 。
show engines;
文章插图
可以看到上图中有包含MyISAM 和 InnoDB 这两种常见引擎,关于这些存储引擎的详细介绍,可以参考MySQL的官方文档,我放上链接:
https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html好了,现在来创建数据表并指定innoDB存储引擎 。
举个栗子:创建表一张大佬数据表 BigOld,表中第一个字段是大佬 id 标识,第二个字段是大佬名字 name,并指定数据库使用的存储引擎类型ENGINE=InnoDB ,下面这条建表语句创建并指定了一个使用 InnoDB 存储引擎的数据库表 。
推荐阅读
- 2020大话嘉年华纪念徽章
- 游戏股为什么大跌 为什么游戏板块大跌
- 白茶适合的人群,哪种人群适合白茶
- 普洱茶部分作用,普洱茶和皖西黄大茶功效与作用的区别
- 大一什么时候军训 2020大学军训一般多长时间
- 绿茶的保质期是多少,绿茶的保质期
- 藏式甜茶的做法,甜菊大麦茶的做法
- 大葱需肥规律 大葱的管理和施肥
- apk是什么文件
- 煲汤大全 4款汤不仅美味还有食疗效果