<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--什么是数据库事务?事务该如何使用?》

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

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

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

相关文章

【漏洞复现】OneThink前台注入漏洞

漏洞描述 OneThink 是一个基于 PHP 的开源内容管理框架,旨在简化和加速Web应用程序的开发过程。它提供了一系列通用的模块和功能,使开发者能够更轻松地构建具有灵活性和可扩展性的内容管理系统(CMS)和其他Web应用。 免责声明 …

Meta降本增效大招之:弃用产品

今晚无意间进入去哪儿技术沙龙的直播间,听到他们要删除50%的代码和停掉50%的服务。我就想起Meta公司最近写的这篇博客:Automating product deprecation。 这篇博客对于效能平台的建设非常具有指导意义。文章最后有原文链接和我个人的总结。 这是一个系列…

扩散模型实战(九):使用CLIP模型引导和控制扩散模型

推荐阅读列表: 扩散模型实战(一):基本原理介绍 扩散模型实战(二):扩散模型的发展 扩散模型实战(三):扩散模型的应用 扩散模型实战(四&#xff…

接口自动化测试面试题

前言 前面总结了一篇关于接口测试的常规面试题,现在接口自动化测试用的比较多,也是被很多公司看好。那么想做接口自动化测试需要具备哪些能力呢? 也就是面试的过程中,面试官会考哪些问题,知道你是不是真的做过接口自动…

京东数据挖掘(京东运营数据分析):2023年宠物行业数据分析报告

随着社会经济的发展,人均收入水平逐渐提高,使得宠物成为越来越多家庭的成员,宠物数量不断增长。伴随养宠人群的增多,宠物相关产业的发展也不断升温,宠物经济规模持续增长。 根据鲸参谋平台的数据显示,在宠物…

传统游戏难产 育碧瞄向Web3

出品过《刺客信条》的游戏大厂育碧(Ubisoft)又在Web3游戏领域有了新动作。 首次试水NFT无功而返后,育碧(Ubisoft)战略创新实验室与Web3游戏网络Immutable达成合作,将利用Immutable 开发游戏的经验和及生态…

C++ 基础二

文章目录 四、流程控制语句4.1 选择结构4.1.1 if语句 4.1.2 三目运算符4.1.3 switch语句注意事项 4.1.4 if和switch的区别【CHAT】4.2 循环结构4.2.1 while循环语句4.2.2 do...while循环语句 4.2.3 for循环语句九九乘法表 4.3 跳转语句4.3.1 break语句4.3.2 continue语句4.3.3 …

python趣味编程-5分钟实现一个测验应用程序(含源码、步骤讲解)

Python测验是用 Python 编程语言编写的,这个关于 Python 编程的简单测验是一个简单的项目,用于测试一个人在给定主题考试中的知识能力。 Python 中的 Quiz项目仅包含用户端。用户必须先登录或注册才能开始Python 测验。 此外,还规定了解决问题的时间。用户应在时间结束前解…

计算机网络:网络层ARP协议

在实现IP通信时使用了两个地址:IP地址(网络层地址)和MAC地址(数据链路层地址) 问题:已知一个机器(主机或路由器)的IP地址,如何找到相应的MAC地址? 为了解决…

力扣刷题篇之数与位3

系列文章目录 目录 系列文章目录 前言 数学问题 总结 前言 本系列是个人力扣刷题汇总,本文是数与位。刷题顺序按照[力扣刷题攻略] Re:从零开始的力扣刷题生活 - 力扣(LeetCode) 数学问题 204. 计数质数 - 力扣(Le…

C# chatGPT API调用示例

# C# API现在需要Verify your phone number to create an API key using Newtonsoft.Json; using System.Text;class Program {static readonly HttpClient client new HttpClient();static async Task Main(){try{// 设置 API 密钥string apiKey "your api";clie…

Elasticsearch 8.9 Bulk批量给索引增加数据源码

一、相关API的handler二、RestBulkAction,组装bulkRequest调用TransportBulkAction三、TransportBulkAction 会把数据分发到数据该到的数据节点1、把数据按分片分组,按分片分组数据再发送到指定的数据节点(1) 计算此文档发往哪个分片1)根据索引是否是分区…

【Linux】vscode远程连接ubuntu失败

VSCode远程连接ubuntu服务器 这部分网上有很多,都烂大街了,自己搜吧。给个参考连接:VSCode远程连接ubuntu服务器 注意,这里我提前设置了免密登录。至于怎么设置远程免密登录,可以看其它帖子,比如这个。 …

Ps:锁定图层

使用“图层”面板上的锁定图层 Lock Layer功能可以完全或部分锁定图层以保护其内容。 比如,在完成某个图层后希望它不再被修改(包括不透明度和图层样式等),可将其完全锁定。 如果不想更改图像,但对其摆放位置还在犹豫不…

SpringBoot整合Quartz示例

数据表 加不加无所谓,如果需要重启服务器后重新执行所有JOB就把sql加上 如果不加表 将application.properties中的quartz数据库配置去掉 自己执行自己的逻辑来就好,大不了每次启动之后重新加载自己的逻辑 链接:https://pan.baidu.com/s/1KqOPYMfI4eHcEMxt5Bmt…

Unittest框架--自动化

Python中方法的传递 参数化 pip install parameterized -i https://pypi.douban.com/simple需求:验证Tpshop登录 # 断言参数化 import time import unittest from parameterized import parameterized from selenium import webdriver from selenium.webdriver.co…

小程序游戏、App游戏与H5游戏:三种不同的游戏开发与体验方式

在当今数字化的时代,游戏开发者面临着多种选择,以满足不同用户群体的需求。小程序游戏、App游戏和H5游戏是三种流行的游戏开发和发布方式,它们各自具有独特的特点和适用场景。 小程序游戏:轻巧便捷的社交体验 小程序游戏是近年来…

OpenCV快速入门:基本操作

文章目录 1. 像素操作1.1 像素统计1.2 两个图像之间的操作1.2.1 图像加法操作1.2.3 图像加权混合 1.3 二值化1.4 LUT(查找表)1.4.1 查找表原理1.4.2 代码演示 2 图像变换2.1 旋转操作2.1.1 旋转的基本原理2.1.2 代码实现 2.2 缩放操作2.3 平移操作2.3.1 …

第四代智能井盖传感器:万宾科技智能井盖位移监测方式一览

现在城市化水平不断提高,每个城市的井盖遍布在城市的街道上,是否能够实现常态化和系统化的管理,反映了一个城市治理现代化水平。而且近些年来住建部曾多次要求全国各个城市加强相关的井盖管理工作,作为基础设施重要的一个组成部分…

TP-LINK联洲面试题

文章目录 1.说一下微服务架构?2.微服务优缺点3.负载均衡的实现算法4.Redis集群部署方式?5.MySQL主从复制?5.1 配置流程5.2 优缺点分析6.口头手撕快排7.队列实现栈和栈实现队列7.1 队列实现栈7.2 栈实现队列8.进程有几种状态?9.Spring Boot Actuator?10.外键、主键和索引?…