【MySQL面试复习】了解过索引吗?(索引的底层原理)/B 树和B+树的区别是什么?

系列文章目录

在MySQL中,如何定位慢查询?
发现了某个SQL语句执行很慢,如何进行分析?


  • 系列文章目录
  • 了解过索引吗?(索引的底层原理)
  • B 树和B+树的区别是什么?


了解过索引吗?(索引的底层原理)

在这里插入图片描述

如果没有索引,要找到某条特定的记录需要遍历整张表。在这种情况下,如果表中数据特别多,那么全表扫描就会很耗时,效率就会很低。但是如果将数据按照某种方式进行排序组合,比如二叉搜索树,那么就不用全表扫描了。在mysql中,一般都是用B+树作为索引结构。


B 树和B+树的区别是什么?

要说为什么用B+树,就要说说为什么不使用其他的数据结构。不用二叉搜索树我认为有两个原因。一个是二叉树中每个结点最多有两个子节点,那么如果数据量很大的话,就会让这个二叉树变的很大,那么存储起来以及查找的时候次效率就不会太高。其次是在二叉搜索树中,极端情况下它会退化成为一个链表,链表的查找速率是很低的,综上,二叉搜索树不合适。红黑树也属于二叉搜索树,虽然避免了极端情况的出现,但它终究还是二叉树。所以也不使用。

那么接下来要解决的问题就是如何让一棵树变小,应该说是变矮。那就不能使用二叉树,这样就出现了B树,它是一种多叉路的平衡查找树。相对于二叉树,B树的每个结点可以有多个子节点。并且数据也是存储在B树里的。

在这里插入图片描述
而mysql实际使用的是B+树它是在B树基础上的一种优化,它更适合实现外存储索引结构。区别在于非叶子结点只存储指针,不存储数据。叶子结点存储真正的数据,并且叶子结点间链接成一个双向循环链表。所以非叶子结点就不需要特别大的存储容量。所以整体来说磁盘读写代价更低,效率更高。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/491189.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JVM】线上一次fullGC排查思路

fullGC问题背景 监控告警发现,今天开始我们线上应用频繁出现fullGC,并且每次出现后磁盘都会被占满 查看监控 查看监控发现FULLGC的机器均为同一个机房的集器,并且该机房有线上error报错,数据库监控对应的时间点也有异常&#x…

电脑蓝牙在哪里打开?1分钟轻松打开蓝牙!

“我在操作电脑的时候想将电脑的蓝牙打开来连接音响和键盘,但是不知道电脑蓝牙应该如何打开,有什么比较简单的方法吗?” 随着无线技术的日益发展,蓝牙已成为连接各种设备的重要桥梁。无论是传输文件、音频还是与外部设备进行通信&…

栈和队列笔试题

答案:(1)seqn[tail]data; tail(tail1)%SEQLEN; (2)data seqn[head]; head (head1)%SEQLEN; (3)head tail; (4)(tail1)%SEQLEN head; (5) while(head!tail) head (h…

【前端素材】推荐优质后台管理系统Welly平台模板(附源码)

一、需求分析 后台管理系统(或称作管理后台、管理系统、后台管理平台)是一种专门用于管理网站、应用程序或系统后台运营的软件系统。它通常由一系列功能模块组成,为管理员提供了管理、监控和控制网站或应用程序的各个方面的工具和界面。以下…

NVIDIA Workbench 安装使用图文教程

NVIDIA Workbench 安装使用教程 文章目录 NVIDIA Workbench 安装使用教程1.安装1.1 下载软件1.2 安装软件 2.使用NVIDIA Workbench2.1 创建一个新项目 3.额外提示3.1 当我们没有停止直接关闭或者直接重启电脑后, 再打开我们已经创立的项目的时候可能会出现创建失败等错误信息.3…

【数据结构与算法】(21)高级数据结构与算法设计之 Dynamic-Programming 动态规划算法 代码示例与详细讲解

目录 4.3 Dynamic-Programming1) Fibonacci降维 2) 最短路径 - Bellman-Ford3) 不同路径-Leetcode 62降维 4) 0-1 背包问题降维 5) 完全背包问题降维 6) 零钱兑换问题-Leetcode322降维零钱兑换 II-Leetcode 518 7) 钢条切割问题降维类似题目 Leetcode-343 整数拆分 8) 最长公共…

153.寻找旋转排序数组中的最小值(二分查找)

一、题目 . - 力扣&#xff08;LeetCode&#xff09; 153. 寻找旋转排序数组中的最小值 二、代码 class Solution { public:int findMin(vector<int>& nums) {int left 0;int right nums.size()-1;int mid (leftright)/2;while(left<right){if(nums[mid]>…

C语言里面的内存函数

1.memcpy函数 &#xff08;1&#xff09;函数的模拟实现&#xff0c;这个函数的作用就是把arr1拷贝到arr2里面&#xff0c;单位是字节&#xff0c;20字节就是5整 数&#xff0c;所以输出的就是1234500000&#xff1b; &#xff08;2&#xff09;之所以强制类型转换成为char*是…

【Python笔记-设计模式】前端控制器模式

一、说明 常作为MVC&#xff08;Model-View-Controller&#xff09;模式的一部分&#xff0c;用来处理用户请求并将其分发给相应的处理程序&#xff08;即路由匹配&#xff09;。 (一) 解决问题 将请求的处理流程集中管理&#xff0c;统一处理所有的请求 (二) 使用场景 需…

JS基础(三)-操作和流程控制

一 操作网页元素的步骤 1. 查找网页元素 给标签设置id属性&#xff0c;一个网页中的id值不允许重复 <button id"btn">按钮</button> 2. 给按钮绑定事件&#xff0c;监听用户操作 btn.onclick function(){ 一旦监听到用户的…

matlab一维二维和三维RBF插值方法

1、内容简介 略 50-可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 matlab一维二维和三维RBF插值方法_哔哩哔哩_bilibili 4、参考论文 略

python print 格式化输出详解

print 输出字符串和数字 以下实例中列举了print打印各种类型的示例 示例如下, print("qayrup") # 直接输出字符串print(100) # 输出数字str qayrup print(str) # 输出变量L [1,2,a] # 输出列表类型变量 print(L) t (1,2,a…