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

news2024/12/26 0:17:30

目录

一、什么是数据库索引?

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.coloradmin.cn/o/1217879.html

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

相关文章

缩放图片算法优化 sse

前情提要 这里实现了打印文件的缩放算法 缩放打印文件&#xff08;prt,prn&#xff09; 核心功能如下&#xff1a; void CZoomPrtFile::zoomPrtFile(BYTE* pTargetData) {float xRatio static_cast<float>(m_perWidth - 1) / m_zoomWidth;float yRatio static_cast<…

[PHP]写个简单的分页静态接口用宝塔部署到Nginx

使用get方式传入page和pageSize参数&#xff0c;接口根据参数进行分页处理。 1.创建一个 PHP 文件 例如 city.php&#xff0c;用于定义接口和返回 JSON 数据。 2.在 city.php 文件中编写接口 <?php// 设置响应内容为 JSON 格式 header(Content-Type: application/json);…

iApp祁天社区UI成品源码 功能齐全的社区应用

iApp祁天社区UI成品源码是一个非常实用的资源&#xff0c;提供了完整的源代码&#xff0c;可以帮助您快速搭建一个功能齐全的社区应用。 这个源码具有丰富的UI设计&#xff0c;经过精心调整和优化&#xff0c;确保用户体验流畅而舒适。它不仅具备基本的社区功能&#xff0c;如…

linux清理僵尸进程

当你top看到这个&#xff0c;或者按M后看到内存吃的很多&#xff0c;那你看下有没有&#x1f9df; 二选一查看是什么进程 ps aux | egrep "Z|defunct" ps -aux | awk {if($8"Z"){print $2,$11}}没用直接杀杀杀 kill -9 查到的PID号可中断下载文件 wget…

基于SSM的智慧养老平台设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

OpenCV中的像素重映射原理及实战分析

引言 映射是个数学术语&#xff0c;指两个元素的集之间元素相互“对应”的关系&#xff0c;为名词。映射&#xff0c;或者射影&#xff0c;在数学及相关的领域经常等同于函数。 基于此&#xff0c;部分映射就相当于部分函数&#xff0c;而完全映射相当于完全函数。 说的简单点…

最新计算机网络考试试题分析与整理

博主今天下午刚刚考完试&#xff0c;针对今天计网考试知识点进行整理总结&#xff0c;希望可以对大家有所帮助~ 目录 1.先看简答大题共五道 1.1CRC冗余码计算 1.2tcp拥塞控制 1.3tcp报文段 1.4RIP路由表更新 1.5子网划分 2.再看填空题七道 2.1网络边缘端系统间的通信关…

ClickHouse的表引擎

1 表引擎的使用 表引擎是ClickHouse的一大特色。可以说&#xff0c; 表引擎决定了如何存储表的数据。包括&#xff1a; 数据的存储方式和位置&#xff0c;写到哪里以及从哪里读取数据。支持哪些查询以及如何支持。并发数据访问。索引的使用&#xff08;如果存在&#xff09;。是…

安装最新版IntelliJ IDEA来开发Java应用程序

安装最新版IntelliJ IDEA来开发Java应用程序 Install the Latest Version of IntelliJ IDEA to Develop Java Applications 本文简要介绍如何安装配置JetBrains IntelliJ IDEA集成开发环境&#xff0c;从而开发Java应用程序&#xff1b;文中侧重实际操作和编程步骤&#xff0…

海康Visionmaster-环境配置:VB.Net 二次开发环境配 置方法

Visual Basic 进行 VM 二次开发的环境配置分为三步。 第一步&#xff0c;使用 VS 新建一个框架为.NET Framework 4.6.1&#xff0c;平台去勾选首选 32 为的工程&#xff0c;重新生成解决方案&#xff0c;保证工程 Debug 下存在 exe 文件&#xff0c;最后关闭新建工程&#xff1…

51单片机应用从零开始(五)·加减乘除运算

51单片机应用从零开始&#xff08;一&#xff09;-CSDN博客 51单片机应用从零开始&#xff08;二&#xff09;-CSDN博客 51单片机应用从零开始&#xff08;三&#xff09;-CSDN博客 51单片机应用从零开始&#xff08;四&#xff09;-CSDN博客 详解 KEIL C51 软件的使用建立工程…

2023年05月 Python(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 明明每天坚持背英语单词,他建立了英语单词错题本文件“mistakes.txt”,将每天记错的单词增加到该文件中,下列打开文件的语句最合适的是?( ) A: f = open(“mistakes.txt”) B: …

基于SSM的学生疫情信息管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

C++打怪升级(十一)- STL之list

~~~~ 前言1. list是什么2. list接口函数的使用1. 构造相关默认构造n个val构造迭代器范围构造拷贝构造 2 赋值运算符重载函数2 析构函数3 迭代器相关begin 和 endrbegin 和rend 4 容量相关emptysize 5 元素访问相关frontback 6 修改相关push_backpop_backpush_frontpop_frontins…

Codewhisperer 使用评价

最近亚⻢逊推出了一款基于机器学习的 AI 编程助手 Amazon CodeWhisperer&#xff0c;可以实时提供代码建议。在编写代码时&#xff0c;它会自动根据现有的代码和注释给出建议。Amazon CodeWhisperer 与GitHub Copilot类似&#xff0c;主要的功能有: 代码补全注释和文档补全代码…

SpringCloud-Gateway修改Response响应体,并解决大数据量返回不全等问题

官网相关案例&#xff1a; Spring Cloud Gatewayhttps://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-modifyresponsebody-gatewayfilter-factory ModifyRequestBodyGatewayFilterFactory类: https://github.com/spring-cloud/spring-cloud-gate…

设计基于STM32F103C8T6微控制器的巡线小车

巡线小车是一种能够在一条预定线追踪路径的小车&#xff0c;广泛应用于工业自动化、物流仓储、智能家居等领域。本设计将使用STM32F103C8T6微控制器来实现一个基础的巡线小车。 硬件组成&#xff1a;1. STM32F103C8T6微控制器开发板&#xff1a;作为巡线小车的核心控制器&…

MFC保存窗口客户区为图片

首先的窗口输出一些内容&#xff1b; 菜单单击函数代码&#xff1b; void CgetmypicView::OnTestGetmypic() {// TODO: 在此添加命令处理程序代码HWND hwnd this->GetSafeHwnd();HDC hDC ::GetWindowDC(hwnd);//获取DC RECT rect;::GetClientRect(hwnd, &rect)…

windows与wsl互传文件

1.把windows上的文件传到wsl中&#xff0c;\\wsl.localhost\Ubuntu-22.04\mnt\wsl 将你要传的文件放到wsl这个路径下&#xff0c;Ubuntu-22.04是我的子系统&#xff0c;换成自己对应的 2.把wsl中的文件传到windows中 将wsl中的文件放到 /mnt/c 或 /mnt/d 中&#xff0c;这两…

ClickHouse SQL操作

基本上来说传统关系型数据库&#xff08;以MySQL为例&#xff09;的SQL语句&#xff0c;ClickHouse基本都支持&#xff0c;这里不会从头讲解SQL语法只介绍ClickHouse与标准SQL&#xff08;MySQL&#xff09;不一致的地方。 1 Insert 基本与标准SQL&#xff08;MySQL&#xff09…