mysql系列之索引(待续)

news2025/1/14 18:04:28

目录

    • 一、索引简述
      • 1、什么叫索引
      • 2、索引的优缺点
      • 3、索引的使用场景
    • 二、索引的算法
      • 1、线性查找 Linear Search
      • 2、二分查找 Binary Search
      • 3、二叉查找树 Binary Search Tree
      • 4、平衡二叉树 AVL Tree
      • 5、B树
      • 6、B+树
    • 三、B树和B+树的理解
      • 1、B树和B+树的区别
      • 2、数据库为什么使用B+树而不是B树

一、索引简述

1、什么叫索引

  • 索引是数据库中对某一列或多个列的值进行预排序的数据结构。
  • 索引可以简单理解为数据的"目录",使用索引可以快速访问数据表中的特定信息。

2、索引的优缺点

优点:

  • 大大加快数据检索的速度。
  • 将随机I/O变成顺序I/O(因为B+树的叶子节点是连接在一起的)。
  • 加速表与表之间的连接。

缺点:

  • 从空间角度考虑,建立索引需要占用物理空间。
  • 从时间角度考虑,创建和维护索引都需要花费时间,例如对数据进行增删改的时候都需要维护索引。

3、索引的使用场景

  • 对于中大型表建立索引非常有效,对于非常小的表,一般全部表扫描速度更快些。
  • 对于超大型的表,建立和维护索引的代价也会变高,这时可以考虑分区技术。
  • 如果表的增删改非常多,而查询需求非常少的话,那就没有必要建立索引了,因为维护索引也是需要代价的。
  • 一般不会出现再where条件中的字段就没有必要建立索引了。 多个字段经常被查询的话可以考虑联合索引。
  • 字段多且字段值没有重复的时候考虑唯一索引。 字段多且有重复的时候考虑普通索引。

二、索引的算法

1、线性查找 Linear Search

事项说明
时间复杂度O(N)
算法从第一个数据开始,逐个匹配
问题随着数据量的增加,性能会急剧下降

2、二分查找 Binary Search

事项说明
时间复杂度O(logN)
算法1.拿出有序数列中点位置作为比较对象。
2.根据中点数据大小,选取一半数据作为新的数列。
3.每次可以将数据量减小一半。
问题需要排序;需要确定中点

3、二叉查找树 Binary Search Tree

事项说明
时间复杂度O(logN) 或 O(N)
算法1.使用经典的二叉查找树数据结构。
2.由根节点开始查找。
问题当根节点一边不断增长,可能退化为线性查找

4、平衡二叉树 AVL Tree

事项说明
时间复杂度O(logN)
算法1.每个节点为单位去读取。
2.查找时,与二叉树搜索树相同。
3. 增删改时,通过旋转操作,维护树的平衡。
问题AVL树可以保证不会退化成线性查找,

5、B树

事项说明
时间复杂度O(mlogmn)
算法1.B树是线性数据结构和树的结合。
2.B树通过多数据节点大大降低了树的高度。
3. B树不需要旋转就可以保证树的平衡。
问题

6、B+树

事项说明
时间复杂度O(mlogmn)
算法1.由B树发展而来的一种数据结构。
2.B+树的所有数据均在叶子节点。
3. B+树的所有数据形成了一个线性表。
特点B+树集成了线性表、平衡二叉树的优势

三、B树和B+树的理解

1、B树和B+树的区别

B树和B+树最主要的区别主要有两点:

  • B树中的内部节点和叶子节点均存放键和值,而B+树的内部节点只有键没有值,叶子节点存放所有的键和值。
  • B+树的叶子节点是通过相连在一起的,方便顺序检索。
    两者的结构图如下:
    B+树
    B树

2、数据库为什么使用B+树而不是B树

  • B树适用于随机检索,而B+树适用于随机检索和顺序检索
  • B+树的空间利用率更高,因为B树每个节点要存储键和值,而B+树的内部节点只存储键,这样B+树的一个节点就可以存储更多的索引,从而使树的高度变低,减少了I/O次数,使得数据检索速度更快。
  • B+树的叶子节点都是连接在一起的,所以范围查找,顺序查找更加方便
  • B+树的性能更加稳定,因为在B+树中,每次查询都是从根节点到叶子节点,而在B树中,要查询的值可能不在叶子节点,在内部节点就已经找到。
  • 那在什么情况适合使用B树呢,因为B树的内部节点也可以存储值,所以可以把一些频繁访问的值放在距离根节点比较近的地方,这样就可以提高查询效率。
  • 综上所述,B+树的性能更加适合作为数据库的索引。

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

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

相关文章

第二章.线性回归以及非线性回归—一元线性回归,代价函数,相关系数,决定系数

第二章.线性回归以及非线性回归 2.1 一元线性回归 1.概念: 1).自变量: 被用来进行预测的变量,相当于输入 2).因变量: 被预测的变量,相当于输出 3).回归分析: 用来建立方程模拟两个或者多个变量之间如何关…

从零开始学习Maven

maven Maven是apache公司开发的基于项目对象模型(POM) 可以通过一些描述信息来管理项目的构建、报告和文档的软件管理工具。 Maven 是用来管理项目,进行项目构建的一个软件。 java编写 项目构建流程: 1. 导入jar包 2. 配置文…

【MyBatis】RC隔离级别下,MyBatis 一级缓存、二级缓存造成的不一致情况

前言 数据库的MVCC 及 锁机制保证了数据的隔离、一致性。而建立在数据库之上的缓存,都会破坏掉数据库的一致性保障。本文探索在RC隔离级别下,MyBatis 一级缓存、二级缓存造成的坑。顺便复习一下 Spock 的用法,更加体验到了 Groovy 清爽的语法…

insert唯一索引加锁流程

MySQL版本:8.0.29 测试表: 测试数据: 开始测试: 事务1执行 加锁分析: mysql> SELECT * FROM performance_schema.data_locks\G *************************** 1. row ***************************ENGINE: INNO…

Express 中使用JWT进行登录验证

cookie 篇 : Node.js 中 cookie的验证登录 | session 篇 : Node.js 中 session验证登录 在前面讲过了两种验证登录的方式,其一是cookie,其二是session;那么在讲JWT之前先来简单的回顾这两种方式区别;cookie和sessi…

Java笔记023-包装类、String类、字符串的特性、String类、StringBuffer类、StringBuilder类

常用类包装类包装类的分类1、针对八种基本定义相应的引用类型-包装类2、有了类的特点,就可以调用类中的方法基本数据类型包装类booleanBooleancharCharacterbyteByteshortShortintIntegerlongLongfloatFloatdoubleDouble包装类和基本数据的转换演示包装类和基本数据…

LInux目录结构

文章目录Linux的目录结构Linux的目录结构Linux路径的描述方式目录各功能介绍HOME目录和工作目录Linux的目录结构 Linux的目录结构 Linux的目录结构是一个树型结构。 Windows 系统可以拥有多个盘符, 如 C盘、D盘、E盘 Linux没有盘符这个概念, 只有一个根目录 /, 所有文件都在…

【UE4 第一人称射击游戏】37-拾取副武器“M4A1”

上一篇:【UE4 第一人称射击游戏】36-切换武器时改变UI本篇效果:在拾取副武器“M4A1”前,点击键盘2键是无法切换武器的,当拾取武器后,点击键盘2键可以切换武器(目前仅是右下角的图标和文字实现了切换&#x…

VBA小模板,一个不放回的抽奖用的例子

1 问题 一个不放回的抽奖用VBA怎么写,下面用一个类似对对碰/ 翻牌子的游戏(抽到的奖励不放回,可抽的东西越来越少)来举例说明 1.1 首先要回顾下几个经典的随机模型 古典概型,重点就是每次抽奖的各个奖品,概…

宇视门禁一体机接线图

宇视门禁一体机接线图宇视门禁一体机带反馈信号电磁锁接线图门禁的GND线通用,可以连到同一根线上,也可以分开连简单整理如图一体机线颜色和功能对应表颜色线路绿色RS485_A粉色RS485_B黑色GND蓝色WIEGAND_OUT_D0白色WIEGAND_OUT_D1灰色WIEGAND_IN_D0棕色W…

测试面试真题|工作2年,从小厂到大厂,薪资翻倍是怎样的体验?

最近,霍格沃兹测试学院学员 C 同学成功拿下某互联网大厂年薪 30W 测试开发岗位 Offer,顺利完成从手工测试工程师到测试开发的逆袭,薪资翻倍(涨幅 100%),并获得了学院颁发的优秀学员奖学金。C 同学工作刚满 …

【3D目标检测】Delving into Localization Errors for Monocular 3D Object Detection

目录概述细节错误分析概述 本文是基于单目图像的3D目标检测方法。 【2021】【MonoDLE】 研究的问题: 核心问题:如何提高基于单目图像的3D目标检测的效果。作者量化了每个子任务的整体影响,观察到以下现象 观察一:定位误差是制约目标检测性…

变异凯撒题解

题目变异凯撒,说明没有使用一般的凯撒加密看到一个密码,我们可以找一下规律首先密文不完全是字母,但是经典凯撒加密的密文一定都是字母,说明这个题目可能是ASCLL码表偏移,而不是字母表偏移经典凯撒加密是字母和字母的偏…

SSM纯注解后台代码整合(Spring+SpringMvc+Mybatis)

SSM后台整合(SpringSpringMvcMybtis事务Rest风格统一结果封装统一异常处理拦截器) 文章目录1 基础环境搭建1.1 建表1.2 创建web项目1.3 导入依赖坐标(pom.xml)1.4 包路径的创建1.5 在pojo包下编写book实体类1.6 在webapp包下导入静…

很多人还不知道中视频计划手机上发布多端横竖屏视频的方法

如果说你刚开始接触中视频,你必须要学会的小知识。 横屏视频是16;9的视频,一般是手机横向拍摄的视频。 上传这样的视频有两种方法。第一种是需要用到电脑,第二种就是我今天要分享的这种,没有电脑,我们用手…

测试新人入职第一天都做什么?

测试入职第一天都做什么? 大家都知道,入职一家新公司就是一个新的起点,新的开始。不管在之前公司干了多久,还是第一次踏入社会进入企业上班,都需要遵守新公司的规则以及规章制度。不管企业的规章制度是什么&#xff0…

前端提交信息规范 commit规范 commitlint husky commitizen

前端提交规范 约定式提交约定式提交安装commitizen 及其适配器husky commitlint 提交校验至此恭喜你已经配置好提交校验了,快去试试吧技术同学开发中有没有出现 : 因某种原因当需要回滚,这时候一看之前提交的massage真的乌烟瘴气 无法分辨回…

使用ResNet50实现CIFAR100数据集的训练

如果对你有用的话,希望能够点赞支持一下,这样我就能有更多的动力更新更多的学习笔记了。😄😄 使用ResNet进行CIFAR-10数据集进行测试,这里使用的是将CIFAR-10数据集的分辨率扩大到32X32,因为算力相关的…

蓝桥杯2019年第十届省赛C++B组

文章目录A:组队(5分 √)B:年号字串(5分 √)C: 数列求值(10分 √)D: 数的分解(10分 )F: 特别数的和(15分 √)A:组队&#x…

【蓝桥杯简单篇】Python组刷题日寄Part05

刷题日记?刷题日寄! 萌新备战蓝桥杯python组 🌹 发现有需要纠正的地方,烦请指正! 🚀 欢迎小伙伴们的三连关注! 往期系列: 【蓝桥杯简单篇】Python组刷题日寄Part01 【蓝桥杯简单篇】…