当前位置: 首页 > news >正文

<MySQL> 什么是数据库索引?数据库索引的底层结构是什么?

目录

一、什么是数据库索引?

1.1 索引的概念

1.2 索引的特点

1.3 索引的适用场景

1.4 索引的使用

1.4.1 创建索引

1.4.2 查看索引

1.4.3 删除索引

二、数据库索引的底层结构是什么?

2.1 数据库中的 B+树 长啥样?

2.2 B+树为什么适合做数据库索引的底层结构?


一、什么是数据库索引?

1.1 索引的概念

        索引(index),与数组下标表示数组中元素的索引值相似,数据库索引也表示了数据表中数据的引用指针,这个指针指向数据表中对应的数据。

        可以对数据表中的一列或多列数据创建索引。索引起到类似“书籍目录”的作用,可以用于快速定位和检索数据,对提高数据库性能有较大帮助。

1.2 索引的特点

(1)可以加快查询速度
        在不使用进行数据库查询时,需要遍历数据来得到查询结果。但是数据库存储介质是硬盘,而不是内存,硬盘的读写比内存慢很多。因此,如果需要提高数据库的查询速度,那么使用索引查询,搭配条件语句筛选数据,减少数据规模,减少硬盘的读写,是一个有效的方式。
(2)索引本身也占据存储空间
        索引本身也是数据,存储索引也需要占用存储空间。
(3)会产生额外的开销
        数据库数据在进行增、删、改时,也需要针对索引进行更新,这就会产生额外的开销。

1.3 索引的适用场景

如果数据表中的某列或多列符合以下条件,则可以考虑创建索引以提高查询效率:

(1)数据量大,查询频高
(2)增、删、改操作频率低
(3)存储空间充足

如果不符合以上的条件,创建索引反而可能会拖累数据库的运行效率,此时则不考虑创建索引。

1.4 索引的使用

1.4.1 创建索引

创建方式说明
自动创建在使用主键约束(primary key)、唯一约束(unique)、外键约束(foreign key)时,会自动创建对应列的索引。
手动创建使用 create index 索引名 on 表名(列名) 的语法进行创建。

        如果存在大量数据,手动创建索引时则应考虑到触发大量硬盘IO的问题,这将导致服务器在完成该创建语句之前,无法响应其他的操作请求。

1.4.2 查看索引

语法show index from 表名;
释义展示指定表中的索引。

1.4.3 删除索引

语法

drop index from 表名;

释义删除指定表中指定列的索引。


二、数据库索引的底层结构是什么?

        索引是通过额外的数据结构,针对数据表中的数据进行重新组织。索引保存的数据结构主要为B+树,及hash的方式

2.1 数据库中的 B+树 长啥样?

2.2 B+树为什么适合做数据库索引的底层结构?

简述B+树的部分特点:

B+树的特点(1)B+树是一棵N叉搜索树,每个节点包含N个KEY,N个KEY划分出N个区间;
(2)每个节点的N个KEY值中,有区间内最大值(或最小值);
(3)每个节点中的KEY都会在子树中重复出现;
(4)最终树的叶子节点之间会使用链式结构相连;

由以上特点可以得出,使用B+树作为数据库索引底层结构存在以下优点

(1)避免了查询数据时对树的回溯。

        由于每个节点中的KEY都会在子树中重复出现,因此树的叶子节点就是数据的全集。将数据全集使用链式结构连接。此时对数据进行范围查找,则只需要查询一次根节点到叶子节点,再从叶子节点沿着链表向后查找即可,避免了子节点回溯父节点这一复杂过程。

(2)稳定的查询时间。

        查询任何元素,从根节点到叶子节点的距离是一致的。这意味着每次查询调用硬盘IO的次数是固定的,查询时间稳定。

(3)充分利用内存进行比较,大幅减少硬盘IO的调用次数。

        数据行的数据只存储在叶子节点,而非叶子节点中只保存了KEY值。KEY值只是索引,数据内存占用小,通常可以缓存到内存中,再进行内存比较。内存比较要比调用硬盘IO进行比较效率高许多个数量级,明显提高了查询效率,降低了开销。


阅读指针 -> 《MySQL--什么是数据库事务?事务该如何使用?》

链接生成中..........

相关文章:

<MySQL> 什么是数据库索引?数据库索引的底层结构是什么?

目录 一、什么是数据库索引? 1.1 索引的概念 1.2 索引的特点 1.3 索引的适用场景 1.4 索引的使用 1.4.1 创建索引 1.4.2 查看索引 1.4.3 删除索引 二、数据库索引的底层结构是什么? 2.1 数据库中的 B树 长啥样? 2.2 B树为什么适合做数据库索…...

对于koa中间件的理解

洋葱模型 大家都知道koa是洋葱模型,先一层一层通过next往下,之后再回去执行next后面的内容,next即使没写,最后也会进入下一个中间件。 那么什么是ctx呢,ctx顾名思义就是上下文,也就是上一层传给下一层的东…...

分页文件pagefile.sys引出的疑问

现象描述: 磁盘中显示无任何文件,却占用5GB左右的磁盘空间;格式化D盘时提示【此驱动器正在使用中。另一个程序或进程正在使用此驱动器。是否仍要对其进行格式化?】,点击【是】提示【Windows 无法完成格式化。】&#…...

【开题报告】疫苗在线预约小程序的设计与实现

1.选题背景 (1)新冠疫情下的疫苗接种挑战: 针对当前全球范围内的新冠疫情,疫苗接种成为控制疫情蔓延的重要手段。然而,大规模疫苗接种也带来了接种排队、人群聚集等管理难题,为了更好地组织和管理疫苗接种…...

【深度学习实验】注意力机制(二):掩码Softmax 操作

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 理论介绍a. 认知神经学中的注意力b. 注意力机制: 1. 注意力权重矩阵可视化(矩阵热图)2. 掩码Softmax 操作a. 导入必要的库b. masked_softmaxc. 实验结果 ​ …...

idea运行项目之后一直卡在Writing classes… 解决方案

最近遇到idea里直接运行一个Spring boot项目后,idea一直慢悠悠的parsing java,然后就writing classes,然后就一直卡着不动了,运气好10几分钟能把项目启动起来。 多年的摸鱼经验告诉我,事出反常必有妖,赶紧…...

CentOS7 安装mysql8(离线安装)postgresql14(在线安装)

注:linux系统为vmware虚拟机,和真实工作环境可能有出入,不过正因如此我暴露了NAT转出的IP也没什么大碍 引言 postgresql与mysql目前都是非常受人欢迎的两大数据库,其各有各的优势,初学者先使用简单一张图来说明两者区…...

使用vant list实现订单列表,支持下拉加载更多

在公司项目开发时&#xff0c;有一个需求是实现可以分页的订单列表&#xff0c;由于是移动端项目&#xff0c;所以最好的解决方法是做下拉加载更多。 1.在页面中使用vant组件 <van-listv-model"loading":finished"finished"finished-text"没有更…...

OpenCV快速入门:图像形态学操作

文章目录 前言一、图像形态学基础1.1 背景介绍1.2 像素距离1.2.1 什么是像素距离&#xff1f;1.2.2 常见的像素距离度量方法1.2.3 计算像素距离的代码实现 1.3 图像连通性1.3.1 什么是图像连通性&#xff1f;1.3.2 连通类型1.3.3 连通组件标记1.3.4 连通性在图像处理中的应用 1…...

Scrapy----Scrapy简介

文章目录 概述与应用背景架构和组件功能和特点社区生态概述与应用背景 Scrapy,一个高效、灵活、且强大的Web爬取框架,被广泛应用于数据抓取和网页内容的结构化提取。它是用Python编写的,支持多平台运行,适用于数据挖掘、在线零售信息收集、历史数据存档等多种场景。Scrapy…...

基环树(pseudotree)入门

目录 无向基环树找环&#xff0c;[题目](https://www.luogu.com.cn/problem/P8655)拓扑排序找环并查集找环dfs找环 内向基环树[2876. 有向图访问计数](https://leetcode.cn/problems/count-visited-nodes-in-a-directed-graph/description/)[2127. 参加会议的最多员工数](https…...

nrm的安装以及使用

1&#xff0c;什么是nrm nrm 是一个 npm 源管理器&#xff0c;允许你快速地在 npm源间切换。 什么意思呢&#xff0c;npm默认情况下是使用npm官方源&#xff08;使用npm config ls命令可以查看&#xff09;&#xff0c;在国内用这个源肯定是不靠谱的&#xff0c;一般我们都会…...

Linux:补充一些常用命令

Linux&#xff1a;补充一些常用命令 1. free -h2. df -lh3. du -sh *4. uname -a5. which6. mvn install 编译打包7. find -name *.jar8. cd -9. nohup java -jar *.jar &10. ps -ef|grep java11. netstat -ntlp 1. free -h free 命令显示系统使用和空闲的内存情况&#x…...

Maven编译报错:javacTask: 源发行版 1.8 需要目标发行版 1.8

报错截图&#xff1a; IDEA中的jdk检查都正常设置的1.8一点毛病没有。参考其他帖子链接如下&#xff1a; https://blog.csdn.net/zhishidi/article/details/131480199https://blog.51cto.com/u_16213460/7197764https://blog.csdn.net/lck_csdn/article/details/125387878 逐…...

python批量为视频添加文字水印和图片水印的程序

如题&#xff0c;代码如下&#xff0c;可设置多个图片水印及它们的移动位置 功能为&#xff1a;可以添加多个动态移动的水印&#xff0c;还可以设置水印的大小以及移动速度&#xff0c;也可以增加文字水印&#xff0c;重点是这个是批量执行的&#xff0c;可以对目录下的所有视…...

使用 webpack 打包 express 应用

使用 webpack 打包 express 应用 安装 webpack 依赖 pnpm add webpack webpack-cli -D初始化配置 可以使用命令 webpack init 初始化配置或者直接自己创建 webpack.config.js 文件和增加 npm 脚本&#xff1a; 下面是 npm 脚本 和 webpack.config.js 配置&#xff1a; // G…...

Add the installation prefix of “Qt5“ to CMAKE_PREFIX_PATH or set “Qt5_DIR“解决

修改为Qt5安装目录...

深度学习——(生成模型)DDPM

前置数学知识 1、先验概率和后验概率 先验概率&#xff1a;根据以往经验和分析得到的概率,它往往作为“由因求果”问题中的“因”出现&#xff0c;如 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xt​∣xt−1​) 后验概率&#xff1a;指在得到“结果”的信息后重新修正的概率,是…...

uniapp如何使用api相关提示框

uni.showToast&#xff1a;用于显示一条带有图标的提示框。title&#xff1a;提示的内容。icon&#xff1a;图标&#xff0c;可选值包括 success、loading、none。duration&#xff1a;提示框持续时间&#xff08;单位&#xff1a;毫秒&#xff09;&#xff0c;默认为1500。 un…...

在Java代码中指定用JAXB的XmlElement注解的元素的顺序

例如&#xff0c;下面的类RegisterResponse 使用了XmlRootElement注解&#xff0c;同时也使用XmlType注解&#xff0c;并用XmlType注解的propOrder属性&#xff0c;指定了两个用XmlElement注解的元素出现的顺序&#xff0c;先出现flag&#xff0c;后出现enterpriseId&#xff0…...

Awoo Installer:破解Switch游戏安装限制的高性能解决方案

Awoo Installer&#xff1a;破解Switch游戏安装限制的高性能解决方案 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer Awoo Installer是一款专为破解…...

iMeta | 浙江农科院卢立志/曾涛联合中南大学湘雅医院揭示人参皂苷Rg3缓解肝脏铁死亡的新机制

点击蓝字 关注我们一种生物活性人参皂苷改善非酒精性脂肪性肝炎中氧化磷脂积累引起的肝细胞铁死亡iMeta主页&#xff1a;http://www.imeta.science研究论文● 原文: iMeta(IF 33.2, 中科院双一区Top)● 英文题目: A bioactive ginsenoside alleviates hepatocellular ferroptos…...

Java微服务Istio配置必须立即更新的4个安全补丁:CVE-2024-23652等高危漏洞绕过配置详解

第一章&#xff1a;Java微服务Istio配置安全补丁的紧急性与背景近年来&#xff0c;Java微服务架构在云原生环境中广泛应用&#xff0c;而Istio作为主流服务网格控制平面&#xff0c;承担着流量管理、可观测性与零信任安全策略实施的关键角色。然而&#xff0c;2024年披露的CVE-…...

Kandinsky-5.0-I2V-Lite-5s短视频质量控制:5秒内关键帧稳定性与抖动抑制技巧

Kandinsky-5.0-I2V-Lite-5s短视频质量控制&#xff1a;5秒内关键帧稳定性与抖动抑制技巧 1. 引言&#xff1a;为什么需要关注短视频质量 当你使用Kandinsky-5.0-I2V-Lite-5s生成短视频时&#xff0c;是否遇到过这些问题&#xff1a;画面突然跳变、主体运动不连贯、镜头移动卡…...

【花雕学编程】代码泄露之后:深度剖析Claude开源对开发者生态的冲击与机遇

导语&#xff1a;2026年3月31日&#xff0c;Anthropic 旗下 Claude Code CLI 客户端源码意外泄露&#xff0c;1906个源文件、51.2万行TypeScript代码被开发者备份至 GitHub 仓库 instructkr/claude-code&#xff0c;标注为“仅供研究”。这场看似偶然的打包失误&#xff0c;并非…...

抛开Transformer,我们还能如何理解Attention机制?

对于许多软件测试从业者而言&#xff0c;“Attention机制”这个词常常与Transformer、BERT、GPT这些大模型名词紧密捆绑&#xff0c;仿佛是深度学习“黑盒”中一个难以触及的复杂组件。然而&#xff0c;当我们暂时抛开Transformer这棵参天大树&#xff0c;回归到Attention机制本…...

告别手动记录:清音听真语音识别系统快速部署,中英文混合转录一键搞定

告别手动记录&#xff1a;清音听真语音识别系统快速部署&#xff0c;中英文混合转录一键搞定 1. 系统概述与核心优势 清音听真语音识别系统搭载了Qwen3-ASR-1.7B旗舰引擎&#xff0c;是专为复杂语音场景设计的高精度转录解决方案。相比前代0.6B版本&#xff0c;1.7B参数模型在…...

Vector API + Panama Foreign Function最新融合实践(2024 Q2实测):纯Java实现BLAS级矩阵运算

第一章&#xff1a;Vector API Panama Foreign Function融合背景与技术演进Java 平台长期面临两大性能瓶颈&#xff1a;一是 JVM 对现代 CPU 向量化指令&#xff08;如 AVX-512、SVE&#xff09;缺乏直接、安全、可移植的抽象&#xff1b;二是 Java 与本地系统库&#xff08;如…...

C++引用:高效编程的技巧

C引用的本质与特性 引用是已存在变量的别名&#xff0c;与变量共享同一内存地址。声明时必须初始化且不可更改绑定对象&#xff1a; int x 10; int& ref x; // ref成为x的别名 ref 20; // 修改x的值引用与指针的核心区别 初始化要求&#xff1a;引用必须声明时初始…...

OpenClaw自动化视频处理:Qwen2.5-VL-7B分析关键帧生成视频摘要

OpenClaw自动化视频处理&#xff1a;Qwen2.5-VL-7B分析关键帧生成视频摘要 1. 为什么需要自动化视频摘要 作为一个经常需要处理大量视频素材的自媒体创作者&#xff0c;我长期被一个痛点困扰&#xff1a;如何快速了解长视频的核心内容。传统方法要么是手动拖动进度条随机查看…...