MySQL面试题--索引概念以及底层

news2024/11/28 1:46:00

目录

概述

索引的底层数据结构

二叉树

B树

 B+树

B树与B+树对比:

面试回答

大纲

回答


概述

        索引(index)是帮助MySQL高效获取数据的数据结构(有序)。

        在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

如果要查找年龄为33的人,左图从上到下遍历,遍历到第一个33依然会向下遍历,效率低 

而如果是二叉树,左小右大,就会方便很多,每一次都可以说是二分查询

索引的底层数据结构

MySQL索引使用的是B+树,在这里我们要与二叉树,红黑树,B树做对比

二叉树

二叉搜索树在极端情况下,会退化为链表

红黑树是平衡的,比较稳定,但是因为红黑树也是二叉树,一个节点只有两个儿子,在大数据量的情况下,红黑树会变得特别特别高

B树

B-TreeB树是一种多叉路衡查找树,相对于二叉树,B树每个节点可以有多个分支,即多叉。

以一颗最大度数(max-degree)为5(5)b-tree为例,那这个B树每个节点最多存储4key

树的高度肉眼可见比二叉树低得多

 B+树

        B+Tree是在BTree基础上的一种优化,使其更适合实现外存储索引结构,InnoDB存储引擎就是用B+Tree实现其索引结构

其中,非叶子节点,只存储指针,不存储数据,数据则统一在叶子节点存储

B树与B+树对比:

①:磁盘读写代价B+树更低;

②:查询效率B+树更加稳定;

③:B+树便于扫库和区间查询

面试回答

大纲

了解过索引吗?(什么是索引)?

        索引(index)是帮助MySQL高效获取数据的数据结构(有序)

        提高数据检索的效率,降低数据库的IO成本(不需要全表扫描)

        通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗

索引的底层数据结构了解过嘛 ?

        MySQL的InnoDB引擎采用的B+树的数据结构来存储索引

        阶数更多,路径更短

        磁盘读写代价B+树更低,非叶子节点只存储指针,叶子阶段存储数据

        B+树便于扫库和区间查询,叶子节点是一个双向链表

回答

面试官:了解过索引吗?(什么是索引)

候选人:嗯,索引在项目中还是比较常见的,它是帮助MySQL高效获取数据 的数据结构,主要是用来提高数据检索的效率,降低数据库的IO成本,同时 通过索引列对数据进行排序,降低数据排序的成本,也能降低了CPU的消耗

面试官:索引的底层数据结构了解过嘛 ?

候选人:MySQL的默认的存储引擎InnoDB采用的B+树的数据结构来存储索 引,选择B+树的主要的原因是:第一阶数更多,路径更短,第二个磁盘读写 代价B+树更低,非叶子节点只存储指针,叶子阶段存储数据,第三是B+树便 于扫库和区间查询,叶子节点是一个双向链表

面试官:B树和B+树的区别是什么呢?

候选人:第一:在B树中,非叶子节点和叶子节点都会存放数据,而B+树的 所有的数据都会出现在叶子节点,在查询的时候,B+树查找效率更加稳定 第二:在进行范围查询的时候,B+树效率更高,因为B+树都在叶子节点存 储,并且叶子节点是一个双向链表

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python扩展开发:从入门到精通

Python扩展开发:从入门到精通 Python是一门高效、可扩展、易学易用的编程语言。Python的优秀性能在科学计算、数据处理、web开发等领域表现突出。然而,Python在特定的应用场景中,如图像处理和机器学习等领域,需要更高效的代码执行…

8.4 IP地址与端口号

目录 IP地址 IP地址及编址方式 IP 地址及其表示方法 点分十进制记法举例 IP 地址采用 2 级结构 分类的 IP 地址 分类的 IP 地址 多归属主机 各类 IP 地址的指派范围 ​编辑 一般不使用的特殊的 IP 地址 ​编辑 分类的 IP 地址的优点和缺点 划分子网 无分类编址 CIDR 无…

【C/C++数据结构与算法】C语言万年历

目录 项目分析 项目效果 头文件及全局变量 获取天数 打印月份、年份日历 main函数 项目分析 实现查询某一个年份、月份,以日历的格式打印为了观赏性利用符号对打印的每一个日期进行分格特殊节日日期能够在日历中标注出来万年历的起始日期是公元1年&#xff0…

【随笔闲谈】软件工程导论

目录 一、软件工程概述 二、启动阶段 三、计划阶段 四、实施阶段 五、收尾阶段 一、软件工程概述 软件危机:在计算机软件的开发和维护过程中遇到的一系列严重问题。 软件危机的产生与自身的特点有关,还与软件开发、管理的方法不正确有关。 软件危…

chatgpt赋能python:Python打开目录:快速浏览目录中的所有文件

Python打开目录:快速浏览目录中的所有文件 Python是一种流行的编程语言,其可扩展性和易学性使其成为一种受欢迎的语言。Python的强大功能之一就是能够操作文件和目录。在本文中,我们将讨论如何使用Python在Windows、Mac和Linux上打开目录并列…

Opencv-C++笔记 (11) : opencv-图像二值化与LUB查找表

文章目录 一、概述二、THRESH_BINARY和THRESH_BINARY_INV三、THRESH_TRUNC四、THRESH_TOZERO和THRESH_TOZERO_INV五、THRESH_OTSU和THRESH_TRIANGLE六、LUT查找表 一、概述 我们在上一节程序中生成了一张只有黑色和白色的图像,这种“非黑即白”的图像像素的灰度值无…

MFC 非线程创建模态化窗口 实现工具栏拓展

1 实现基本工具栏 1.1 在Dlg.h文件中声明变量和定义资源ID #define ID_BUTTONS 501CToolBar m_toolbar; //工具栏 CImageList m_imageList; //工具栏图片 CImageList m_hotImageList; //工具栏热点图片 CReBar m_Rebar; //可以在位图上显示子窗口口 用来显示背景 CString…

【DeepLearning】Ubuntu中深度学习环境配置完整流程

Ubuntu中深度学习环境配置完整流程 1 显卡驱动2 cuda3 cuDNN4 torch5 torchvision 1 显卡驱动 支持 cuda 的所有显卡型号: Link 查询显卡型号 lspci -nn | grep VGA即 Vendor ID:Device ID 为 10de:21c4,在浏览器或者 Link 中搜索。 填写显卡信息: Link 选择要下载…

Jenkins-pipeline自动化构建Java应用

本实验操作需要:Jenkins,git代码仓库(如gitlab,gitee等都可以),maven,docker,docker镜像仓库(habor,nexus或者阿里云ACR等)以及k8s环境。 前期准…

nginx特点以及安装

目录 1.特点 2.nginx和apache的区别 3.nginx应用场景 4.安装nginx 5. 更新nginx版本 6.总结 1.特点 高性能 轻量级web服务软件 稳定性高 系统自选消耗低 对http并发链接处理能力高 #处理并发连接能力 1.cup个数 2.本地服务器最大文件打开数 2.nginx和apache的区别 ng…

chatgpt赋能python:打包Python应用程序成deb包

打包Python应用程序成deb包 随着Python编程语言的不断发展,越来越多的开发者使用Python编写应用程序。然而,将Python程序打包并制作成deb包以进行安装可能仍然是一个难点。本文将介绍如何使用Debian打包工具,将Python应用程序制作成deb包。 …

chatgpt赋能python:Python扩展库介绍

Python扩展库介绍 Python是一种广泛使用的编程语言,它的易用性和可扩展性是许多开发者选择它的原因之一。这个语言有着丰富的扩展库,让开发者能够更加高效地编写代码。在这篇SEO文章中,我们将介绍几个与Python相关的扩展库。 NumPy NumPy是…

RPC远程调用

简介 PRC是一种调用方式而不是一种协议 在本地调用方式时由于方法在同一个内存空间,所以程序中可以直接调用该方法,但是浏览器端和服务端程序是不在一个内存空间的,需要使用网络来访问,就需要使用TCP或者UDP协议,由于…

使用frp工具实现内网穿透以及配置多个ssh和web服务

frp简介 FRP 项目地址 https://github.com/fatedier/frp/blob/master/README_zh.md frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。 环境准备 ssh连接 1. 需要一台可以直接访问…

简要介绍 | 交叉熵损失:原理和研究现状

注1:本文系“简要介绍”系列之一,仅从概念上对交叉熵损失进行非常简要的介绍,不适合用于深入和详细的了解。 注2:"简要介绍"系列的所有创作均使用了AIGC工具辅助 交叉熵损失:原理、研究现状与未来展望 Under…

Web3 是什么?为何应该关注?

当我开始我的职业生涯时,“Web2.0”还是一个热门的新事物。 当我开始我的职业生涯时,正值互联网快速发展的时期,人们谈论的是“Web2.0”,这一概念引发了许多关于用户参与、社交媒体和在线合作的讨论。然而,随着时间的推…

SQL优化--如何分析优化呢?

目录 一个SQL语句执行很慢, 如何分析? ​编辑 重要属性 possible_key key key_len Extra type 面试回答 框架 范例 例: 上面三种查询我们都可以通过执行计划找到查询慢的原因,并且提供解决方案 比如聚合查询可以新增临时表&…

【Leetcode -563.二叉树的坡度 - Nowcoder -KY11.二叉树遍历】

Leetcode Leetcode -563.二叉树的坡度c Leetcode -563.二叉树的坡度 题目:给你一个二叉树的根节点 root ,计算并返回 整个树 的坡度 。 一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树…

leetcode数据库题第五弹

leetcode数据库题第五弹 1141. 查询近30天活跃用户数1148. 文章浏览 I1158. 市场分析 I1164. 指定日期的产品价格1174. 即时食物配送 II1179. 重新格式化部门表1193. 每月交易 I1204. 最后一个能进入电梯的人1211. 查询结果的质量和占比1251. 平均售价小结 1141. 查询近30天活跃…

chatgpt赋能python:Python打开文件目录:入门指南

Python打开文件目录:入门指南 打开文件目录是编程中常见的操作之一。Python 作为一种优秀的脚本语言,提供了众多的实用方法来操作文件系统。在本文中,我们将介绍如何使用 Python 打开文件目录,同时提供一些对 SEO 优化有帮助的技…