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

[MySQL]索引

目录

概念解释

作用/优点

缺点

适用场景

索引的创建,删除与查看

系统对索引的自动创建

索引建立的时机

索引存储的数据结构

选择B+树的原因

B树的原理

查询流程

优点

B+树

与B树的区别

优点


概念解释

索引就像是一本字典的目录,我们可以根据目录快速定位到我们想要查找的字词

作用/优点

在数据库中,索引起到的作用是:

  1. 提升了数据库中查询数据的效率
  2. 降低数据库IO的成本(通过B+数来实现)

缺点

  1. 索引的创建是需要花费额外的空间
  2. 建立索引后,对于数据库中数据的增,删,改可能会增加耗费的成本,因为除了对数据库中数据的更改还要对索引进行调整.导致了效率的降低.

适用场景

根据上面的优点和缺点,可以看出索引的适用场景为:

频繁的进行查询操作,但不常对数据的增,删,改操作的表.

索引的创建,删除与查看

create index 索引名 on 表名(字段名);  //创建普通索引
drop index 索引名 on 表名;  //删除索引
show index from 表名;  //查看索引

系统对索引的自动创建

对于表中的主键,外键和被unique修饰的属性,系统会自动创建出对应的索引.

  1. 因为主键是大多数情况下对数据进行定位的属性,需要频繁查询.
  2. 而外键是与其他表进行连接查询的属性,也需要频繁的查询.
  3. unique则是在插入或修改数据的时候,需要先对表进行扫描一遍,查看unique修饰的属性是否有与即将插入的字符一致的数据

系统建立的索引我们是删除不掉的噢

索引建立的时机

索引的建立应当在初期(没有数据,或数据较少的时期)设计数据库表的时期一同设计,因为当表中已经存在了较多的数据的时候建立索引,就会消耗巨大的时间成本.

因为索引相当于给每一个数据都建立了一个定位,数据太多的画就要一遍一遍的对已存在的数据进行描扫.而且与此同时,在建立索引的时候,整个数据库其实是处于一种封锁的状态,并不能进行其他的操作.

如果在初期数据还没有存储或数据较少的时候建立起索引,消耗的时间成本就会非常小.以后每次新增添数据的时候再顺带的放入索引,相当于将时间均摊到每一条对数据的操作语句上.就比较容易让人接受

索引存储的数据结构

B+树

选择B+树的原因

1.hash

只能进行准确的定位,并不能满足于MySQL中的模糊查询(like),与范围查询

2.红黑树

虽然能满足模糊查询与范围查询,但是由于红黑树是一颗二叉树,存储数据会容易导致树的高度过高.在查询数据的时候可能会频繁的对磁盘进行读取,使得IO次数增加

所以一种专门为数据库量身定做的数据结构,B树被开发出来了.而B+树是B树的一种变形.

B树的原理

B树是一种N叉搜索树

结点中N个key会有N+1个key结点

查询流程

从根结点出发 -> 查看目标是否存在此结点,

如果不存在,就看元素是落在此结点的哪一个区间内,根据区间继续往下面的子树找.

如果存在,则返回.

优点

1.由于B树是N叉搜索树,且一个结点可以存放多个数据.对于总的元素个数来说,B树的高度会远小于二叉树.

2.树高度的减少,就会相应的降低了从磁盘中读取数据的次数,降低了IO的成本

B+树

与B树的区别

    1. 与B树不同的点是,B+树一个结点N个key只会有N个子树.
    2. 且B+树的子结点会包含有父亲结点中区间内最大的元素.

优点

可以看到B+树的叶子结点中,包含了整棵树的所有结点,是一个全集.此时再帮叶子结点建立链接,就像链表一样.

1.因为这个特性,B+树就特别擅长范围查找.

2.只有叶子结点储存行单元,非叶子结点存储行单元的主键.

  节省了存储的空间,B+树就会变得特别小,可以直接放在存储空间中.又提升了读取数据的效率(B树的叶子结点不是全集,每一个结点的元素都是一个行单元)

3.N叉树的特性,树高度不高,减少了IO次数

相关文章:

[MySQL]索引

目录 概念解释 作用/优点 缺点 适用场景 索引的创建,删除与查看 系统对索引的自动创建 索引建立的时机 索引存储的数据结构 选择B树的原因 B树的原理 查询流程 优点 B树 与B树的区别 优点 概念解释 索引就像是一本字典的目录,我们可以根据目录快速定位到我们想…...

什么是AUTOSAR ComStack,AUTOSAR架构中,CAN通信堆栈CAN Communication Stack介绍

AUTOSAR(Automotive Open System Architecture)ComStack指的是AUTOSAR架构中的通信堆栈。在AUTOSAR体系结构中,ComStack是指用于不同软件组件(如应用软件、基础软件等)之间进行通信的一组协议和服务。 在AUTOSAR架构中…...

黄金期货与黄金现货的区别

黄金期货与黄金现货是有区别的,比如在交易机制方面,黄金期货有具体的交割日,合约到期就必须交割,否则会被强行平仓或以实物进行交割,而在保证金不足时也会被强行平仓;而现货黄金就没有交割限制,…...

【数据结构】数组和字符串(五):特殊矩阵的压缩存储:稀疏矩阵——压缩稀疏行(CSR)

文章目录 4.2.1 矩阵的数组表示4.2.2 特殊矩阵的压缩存储a. 对角矩阵的压缩存储b~c. 三角、对称矩阵的压缩存储d. 稀疏矩阵的压缩存储——三元组表e. 压缩稀疏行(Compressed Sparse Row,CSR)矩阵结构体创建CSR矩阵元素设置初始化打印矩阵销毁…...

springboot整合postgresql

使用docker安装postgres 简单起见,这里用docker来安装postgresql docker pull postgresdocker run --name postgres \-e POSTGRES_PASSWORD123456 \-p 5432:5432 \-v /usr/local/docker/postgresql/data:/var/lib/postgresql/data \-d postgrespostgres客户端 pg…...

C#__委托delegate

委托存储的是函数的引用(把某个函数赋值给一个委托类型的变量,这样的话这个变量就可以当成这个函数来进行使用了) 委托类型跟整型类型、浮点型类型一样,也是一种类型,是一种存储函数引用的类型 using System.Reflec…...

Jupyter Notebook的安装方法以及生成ipykernel

1. 安装Python和pip Jupyter Notebook是基于Python的,因此首先需要在电脑上安装Python和pip。可以通过访问Python官网(Welcome to Python.org)下载安装包进行安装。在安装Python的过程中,会提示是否安装pip,选择安装即可。 2. 安装Jupyter …...

测试员如何快速复现bug?一款合适的视频录制软件了解一下

你是不是还在为描述缺陷复现步骤而苦恼?你是不是还在为寻找一款合适的视屏录制软件而挣扎?那么,你应该好好看看这篇小文章。 作为测试人员,撰写测试用例、提交测试缺陷是基本工作。但往往我们会遇到:开发人员无法根据…...

论文-分布式-并发控制-并发控制问题的解决方案

目录 参考文献 问题 解法与证明 易读版本 参考文献 Dijkstra于1965年发表文章Solution of a Problem in Concurrent Programming Control,引出并发系统下的互斥(mutual exclusion)问题,自此开辟了分布式计算领域Dijkstra在文中给出了基于共享存储原子…...

【网络协议】聊聊http协议

当我们输入www.baidu.com的时候,其实是先将baidu.com的域名进行DNS解析,转换成对应的ip地址,然后开始进行基于TCP构建三次握手的连接,目前使用的是1.1 默认是开启了keep-Alive。可以在多次请求中进行连接复用。 HTTP 请求的构建…...

图神经网络论文笔记(一)——北邮:基于学习解纠缠因果子结构的图神经网络去偏

作者 :范少华 研究方向 :图神经网络 论文标题 :基于学习解纠缠因果子结构的图神经网络去偏 论文链接 :https://arxiv.org/pdf/2209.14107.pdf        https://doi.org/10.48550/arXiv.2209.14107 大多数图神经网络(GNNs)通…...

java初始化list的几种方式

在Java中初始化List有以下几种常见的方式: 使用Arrays.asList()静态方法: List<Integer> list1 Arrays.asList(1, 2, 3);使用List接口的实现类ArrayList的构造函数: List<String> list2 new ArrayList<>();使用Collections.singletonList() String obj…...

Linux:文件操作

目录 一、关于文件 1、文件类的系统接口 2、文件的含义 二、文件操作 1、C语言文件相关接口 2、系统接口 open close write read 三、文件描述符 关于fd fd的分配规则 输出重定向示例 输入重定向示例 追加重定向示例 dup2函数 缓冲区 stdout与stderr perror…...

vue源码笔记之——运行时runtime

源码中的位运算 按位于 运算 if (shapeFlag & ShapeFlags.TELEPORT) {解释&#xff1a;如果shapFlag本身值为8&#xff0c;type为1的话&#xff0c;那么转换为二进制&#xff08;js都是32位&#xff09;那就是 shapFlag&#xff1a;00000000 00000000 00000000 00001000 …...

MySQL数据库干货_09—— MySQL中的外键约束(Foreign Key)

外键约束(Foreign Key) 添加外键约束 使用DDL语句添加外键约束 ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY( 列 名 ) REFERENCES 参照的表名(参照的列名);示例一&#xff1a; 创建 departments 表包含 department_id 、department_name &#xff0c;location_id。…...

springboot配置https

SSL &#xff1a; secure socket layer 是一种加密协议&#xff0c;SSL主要用于保护数据在 客户端和服务器之间的传输&#xff0c;&#xff0c;防止未经授权的访问和窃取敏感信息 在腾讯云申请ssl证书 申请了之后在我的域名中&#xff0c;&#xff0c;解析 解析了之后&…...

java - IDEA IDE - 设置字符串断点

文章目录 java - IDEA IDE - 设置字符串断点概述笔记END java - IDEA IDE - 设置字符串断点 概述 IDE环境为IDEA2022.3 在看一段序列化的代码, 想找出报错抛异常那个点, 理解一下代码实现. 因为序列化代码实现在第三方jar包中, 改不了(只读的). 根本数不清第几次才会开始报…...

【图像分类】基于计算机视觉的坑洼道路检测和识别(ResNet网络,附代码和数据集)

写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。(专栏订阅用户订阅专栏后免费提供数据集和源码一份,超级VIP用户不在服务范围之内,不想订阅专栏的兄弟们可以私信…...

关于readline方法使用的一个中文乱码引发的思考

故事起源于这段代码&#xff0c;我想给一个本地地址然后去读取文件内容&#xff0c;然后使用了reader.readLine();方法&#xff0c;但是本地没有任何报错&#xff0c;但是线上中文乱码导致直接报错了。 BufferedReader reader;try {reader new BufferedReader(new FileReader(…...

BUUCTF 神秘龙卷风 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 神秘龙卷风转转转&#xff0c;科学家用四位数字为它命名&#xff0c;但是发现解密后居然是一串外星人代码&#xff01;&#xff01;好可怕&#xff01; 密文&#xff1a; 下载附件&#xff0c;解压得到一个.rar压缩…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...