数据库索引的理解

目录

1.索引是什么,解决了什么问题

2.索引付出了什么代价

3.如何使用sql索引,有何注意事项

普通索引:

唯一索引:

主键索引(Primary Key Index):

删除索引:

创建主键索引的基本语法:

4.索引背后的数据结构


1.索引是什么,解决了什么问题

在数据库中,索引是一种数据结构,它被设计用来提高数据检索的速度。类似于书籍的目录,索引使得数据库能够快速定位到数据存储的位置,从而加速查询过程。

  1. 提高了查询速度:在数据库中假设有上千万条数据,在没有索引的情况下,我们可能需要遍历整张表,那么这个操作就会非常消耗时间。但是呢,通过创建索引,我们就能直接定位到所需数据的存储位置,从而减少查询时间
  2. 唯一性约束:唯一索引可以确保表中的某一列或多列数据的唯一性,防止重复插入数据

2.索引付出了什么代价

  1. 付出了更多的存储空间,可以理解成用空间来换取时间
  2. 可能会影响增删改的效率,但是整体来说利大于弊,对于这条下面单独讲解

为什么可能会影响增删改的效率呢?原因有以下几点

  • 索引维护成本 : 每次当插入新纪录,删除现有记录或更新索引字段的值,数据库都需要相应的更新索引结构以保证其准确性
  • 磁盘I/O操作增多 : 索引的维护通常涉及磁盘I/O操作,因为索引结构往往存储在磁盘上

3.如何使用sql索引,有何注意事项

   普通索引:

默认类型,允许重复值和空值

基本语法:

create index 下标名 on 表名(列名);

举例说明:

 根据上述图我们不难看出,在Key列,id行有一个MUL,那么这个MUL是什么意思呢?

‘MUL’表示该列上有非唯一索引,也就是我们所说的普通索引

‘UNI’表示该列上有唯一索引

'PRI'表示该列上有非唯一索引

当然,查看索引是否创建成功我们不止有desc 表名这一种方法,我们还可以使用show index from 表名,这种方法就不在这里展示了

唯一索引:

确保数据的唯一性和准确性,不允许有重复的值(除了NULL值)

基本语法:和普通索引差不多,只不过是多了一个unique关键字

create unique index 索引名 on 表名(列名);

举例说明:

这里的 'UNI' 参考上文普通索引的补充 

主键索引(Primary Key Index):

首先,每个表只能有一个主键,主键的值必须唯一且不能为空(NULL)。由于主键的唯一性和非空性,主键索引自然也具有唯一性,这意味着索引中的每个值必须是唯一的

在数据库中普通索引,唯一索引和主键索引是可以共存的,这里只是为了方便演示就把普通索引和唯一索引,删除索引的方式如下

删除索引:

基本语法:

drop index 索引名 on 表名;

举例说明: 

创建主键索引的基本语法:

alter table 表名 add primary key(列名);

 举例说明:


索引是针对列来创建的,后续查询的时候,查询条件使用的列和索引列匹配,才能索引生效,才能提高效率

针对一个比较大的表,创建/删除索引是一个非常危险的操作,可能会触发大量硬盘IO,把机器搞挂

那么这个硬盘IO又是什么呢?简单来说就是,硬盘I/O(Input/Output,输入/输出)是指硬盘与计算机系统之间进行的数据传输操作,具体包括读取(Read)和写入(Write)两个基本过程。

4.索引背后的数据结构

特点:

  • 每个节点上包含N个key,划分出N个区间
  • 每个父节点的元素都会下沉到子节点中,作为该子节点中最大值的角色来存在
  • 叶子节点这一层就构成了数据集合的全集
  • 使用类似于链表这样的结构,把叶子节点串起来

优势:

  • 高度比较低,降低了硬盘IO次数
  • 范围查询非常方便&高效
  • 所有查询都落到叶子节点上,开销稳定,容易预估成本
  • 叶子结点存储

根据上图我们可以看见每一层的数字都作为下一层的最大值,而叶子结点写的并非是真正的值,而是一个一个行,比如这个 “1” 可能存放的是 “1  张三  法务部” 这条记录,表里的每一行都是挂在B+树的叶子结点上面的,而非叶子节点只需要存储key的值即可,不需要存储数据行

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

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

相关文章

玩转Linux进度条

准备工作&#xff1a; 一.关于缓冲区 首先&#xff0c;咱们先来一段有意思的代码&#xff1a; #include<stdio.h> #include<unistd.h> int main() {printf("you can see me");sleep(5);} 你可以在你的本地运行一下&#xff0c;这里我告诉大家运行结果…

如何用python做一个用户登录界面——浔川python社

1 需解决的问题&#xff1a; 1.1如何用python做一个用户登录界面&#xff1f; 1.2需要用到哪些库、模块&#xff1f; 2 问题解决&#xff1a; 2.1 回答 1.1 &#xff1a;合理即可&#xff0c;无标准回答。 2.2 回答 1.2 &#xff1a;tk库&#xff08;缩写&#xff09;、GUL界面…

appium元素定位工具_uiautomatorviewer.bat

特点&#xff1a; uiautomatorviewer是android-sdk自带的元素定位工具uiautomatorviewer只能用于安卓系统&#xff1b;它是通过截屏分析XML布局文件方式&#xff0c;来提供控件信息的查看服务 uiautomatorviewer.bat 基本使用 路径&#xff1a;这个工具是Android SDK中自带&…

项目中统一异常处理

项目中统一异常处理 1.异常处理框架图2.实现 1.异常处理框架图 异常处理除了输出在日志中&#xff0c;还需要提示给用户&#xff0c;前端和后端需要作一些约定&#xff1a; 错误提示信息统一以json格式返回给前端。以HTTP状态码决定当前是否出错&#xff0c;非200为操作异常。…

QML信号连接到c++的槽函数(五)

文章目录 前言一、QML Signal and Handler Event System二、QML信号连接到c++的槽函数代码实例1. 创建一个QML 工程2. 用C++ 实现一个QML Types3. 代码实例4. 运行结果总结参考资料前言 本文主要介绍,如何将QML 中的信号连接到C++ 中的槽函数 软硬件环境: 硬件:PC 软件:wi…

在国内PMP含金量并不高?

PMP已经在全球194个国家和地区得到广泛认可&#xff0c;自1999年开始在国内实施。PMP被认为是项目管理专业身份的象征&#xff0c;是项目经理最重要的资质。获得PMP证书意味着个人的项目操作水平已经得到了PMI的认可&#xff0c;具备国际专业项目操作者水平&#xff0c;有资格专…

大模型应用之基于Langchain的测试用例生成

一 用例生成实践效果 在组内的日常工作安排中&#xff0c;持续优化测试技术、提高测试效率始终是重点任务。近期&#xff0c;我们在探索实践使用大模型生成测试用例&#xff0c;期望能够借助其强大的自然语言处理能力&#xff0c;自动化地生成更全面和高质量的测试用例。 当前…

[数据集][目标检测]旋风检测数据集VOC+YOLO格式157张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;159 标注数量(xml文件个数)&#xff1a;159 标注数量(txt文件个数)&#xff1a;159 标注类别…

1. MySQL 数据库的基本操作

文章目录 【 1. SQL 的书写规则 】大小写规则常量的表示注释 【 2. RDBMS 术语 】Table 表Filed 域/字段Column 列Record 记录NULL 空值Constraint 约束数据的完整性范式 【 3. 数据库基本操作函数 】3.1 SHOW DATABASES 显示数据库3.2 CREATE DATABASE 创建数据库3.3 ALTER DA…

STM32-14-FSMC_LCD

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32-11-电容触摸按键 STM32-12-OLED模块 STM32-13-MPU 文章目录 1. 显示器分类2. LCD简…

[Windows] 植物大战僵尸杂交版

游戏包含冒险模式、挑战模式、生存模式三种不同玩法。冒险模式主打关卡闯关&#xff0c;挑战模式则挑战特殊设计的关卡&#xff0c;生存模式结合无尽模式和特殊地图&#xff0c;各具特色。玩家可根据喜好自由选择模式&#xff0c;体验不同的游戏乐趣。快来尝试这款独特的pvz游戏…

6月2(信息差)

&#x1f30d;特斯拉&#xff1a;Model3高性能版预计6月中旬开启首批交付 &#x1f384;微软对开源字体 Cascadia Code 进行重大更新 ✨天猫618加码引爆消费热潮 截至晚9点185个品牌成交破亿 1.瑞士清洁科技公司Librec开发废旧锂离子电池回收技术&#xff0c;可回收电池90%的…

【设计模式】JAVA Design Patterns——Factory Method(虚拟构造器模式)

&#x1f50d;目的 为创建一个对象定义一个接口&#xff0c;但是让子类决定实例化哪个类。工厂方法允许类将实例化延迟到子类 &#x1f50d;解释 真实世界例子 铁匠生产武器。精灵需要精灵武器&#xff0c;而兽人需要兽人武器。根据客户来召唤正确类型的铁匠。 通俗描述 它为类…

IDEA2020.3部署旧的的web工程,报错,参考下面的配置

以下内容&#xff0c;需要仔细核对&#xff0c;有些配置只是针对本项目进行的配置&#xff0c;仅供参考&#xff0c;可以解决一些问题。 File->Project Structure&#xff1a; Tomcat配置&#xff1a; 完成。 详细内容&#xff0c;参考&#xff1a;IDEA2020.3部署旧的的web工…

备战十一届大唐杯国赛预选赛

这次省赛带了太多个省一了&#xff0c;具体可看下面的图片&#xff0c;只放了一部分。目前根据可靠消息&#xff0c;应该还有个预选赛和去年一样&#xff0c;就是还会考一次仿真。如果说通过了就是国二起步然后去北方工业争夺国一国二&#xff0c;没过的话就是国三。 每…

Python实用代码片段分享(三)

在今天的博文中&#xff0c;我们将继续分享一些Python编程中非常实用的代码片段。这些代码片段将帮助你更高效地处理常见任务&#xff0c;从字符转换到数据类型检查&#xff0c;应有尽有。 1. ord函数和chr函数 Python的ord()函数可以返回Unicode字符对应的ASCII码值&#xf…

精准检测,可燃气体报警系统的技术原理与特点

在现代化的工业生产与日常生活中&#xff0c;可燃气体泄露事故频发&#xff0c;给人们的生命和财产安全带来了严重威胁。 因此&#xff0c;可燃气体报警检测系统的应用变得尤为重要。它不仅能够实时监测环境中的可燃气体浓度&#xff0c;还能在发现异常情况时及时报警&#xf…

[leetcode hot150]第五十七题,插入区间

题目&#xff1a; 给你一个 无重叠的 &#xff0c;按照区间起始端点排序的区间列表 intervals&#xff0c;其中 intervals[i] [starti, endi] 表示第 i 个区间的开始和结束&#xff0c;并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval [start, end] 表示…

【机器学习】——驱动智能制造的青春力量,优化生产、预见故障、提升质量

目录 一.优化生产流程 1.1 数据收集 1.2 数据预处理 1.3 模型训练 1.4 优化建议 1.5 示例代码 二.预测设备故障 2.1 数据收集 2.2 数据预处理 2.3 模型训练 2.4 故障预测 2.5 示例代码 三.提升产品质量 3.1 数据收集 3.2 数据预处理 3.3 模型训练 3.4 质量提升…

最新一站式AI创作中文系统网站源码+系统部署+支持GPT对话、Midjourney绘画、Suno音乐、GPT-4o文档分析等大模型

一、系统简介 本文将介绍最新的一站式AI创作中文系统&#xff08;集成ChatGPTMidjourneySunoStable Diffusion&#xff09;——星河易创AI系统&#xff0c;该系统基于ChatGPT的核心技术&#xff0c;融合了自然语言问答、绘画、音乐、文档分享、图片识别等创作功能&#xff0c;…