MYSQL——索引概念索引结构

索引

索引是帮助数据库高效获取数据的排好序的数据结构

有无索引时,查询的区别

主要区别在于查询速度系统资源的消耗。

  1. 查询速度

    没有索引的情况下,数据库需要对表中的所有记录进行扫描,以找到符合查询条件的记录,这个过程可能会非常耗时,特别是对于大表来说。

    如果有索引,数据库可以通过索引快速定位到符合查询条件的记录,大大减少了查询时间。

  2. 系统资源消耗

    无索引时,由于需要扫描整个表,因此会占用大量的系统资源,如CPU、内存等。

    有索引时,由于只需扫描索引,所以系统资源的消耗相对较小

注意:索引并不是越多越好。过多的索引会增加数据库的空间开销,同时也可能导致查询性能下降
也会降低更新表的速度,如对表进行INSERT、UPDATE、DELETE时,效率降低

索引结构

常见的索引结构:

二叉树

二叉树索引结构是一种基于排序二叉树的索引方法。树中每个节点的值大于其左子树中任意节点的值,小于其右子树中任意节点的值。

优点

查找效率高,特别是在数据量较大时,查找性能的优势更为明显。

局限性

二叉树索引最理想的状态,即主键插入构成的排序二叉树为完全二叉树,即叶子节点都在最后一层,这样二叉树的查询效率最高。如下图所示

请添加图片描述

但如果主键是顺序插入的,则会出现一条单向链表,也就是最极端的情况。

请添加图片描述

(此时查询的情况就跟无索引时一样了,需要通过遍历整列数据来得到查询结果)

所以二叉树的局限性在于它的高度(层次)不可控,影响因素高。

二叉树的缺点

  • 顺序插入时,会形成一个链表,查询性能大大降低。

  • 大数据量情况下,层级较深,检索速度慢。

红黑树

红黑树是一种自平衡的二叉查找树,它通过一定的规则使得树保持大致平衡,从而提高了查找效率。

请添加图片描述

二叉树改良,但还是存在大数据量情况下,层级较深,检索速度慢的问题。

B-Tree

B-Tree是一种自平衡的多路查找树。

(其中B是Balanced (平衡)的意思,节点最大的孩子数目m称为B-Tree的阶(order)。)

但是,由于每个节点同时存储了数据和索引,所以每个节点所能存储的数据较少,浪费了一定的存储空间。

请添加图片描述

特点

  • 在B-Tree中,非叶子节点和叶子节点都会存放数据。
  • 在B-Tree中,每个内部节点(非叶子节点)存储的key数量等于它的阶数减一,对应的指针数量等于它的阶数.
  • 一旦节点存储的key数量到达阶数,就会裂变,中间元素向上分裂。

B+Tree

B+Tree和B-Tree十分类似。

B+Tree的特点在于:

  • 所有的数据都会出现在叶子节点。
  • 叶子节点形成一个单向链表。
  • 非叶子节点仅仅起到索引数据作用,具体的数据都是在叶子节点存放的。

所以B+Tree更有优势

  • 更好的磁盘读写性能
  • 更好的范围查找性能

优化

在MySQL中,索引数据结构对经典的B+Tree进行了优化,这种优化主要是增加了指向相邻叶子节点的链表指针,形成了带有顺序指针的B+Tree。

提高区间访问的性能,当在查找某个范围内的数据时,可以直接通过这些顺序指针快速跳转到下一个叶子节点,而不必逐级向上查找。

Hash

Hash索引是一种基于哈希表实现的索引结构。其基本思想是,对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码(hash code),将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针

在哈希索引中,数据的存储和查找都是基于哈希函数进行的。哈希函数可以将任意长度的输入(也叫做“键”)通过散列算法,变换成固定长度的散列值(也叫做“哈希值”)。这个哈希值就是我们在哈希索引中用来定位数据的地址。

img当我们需要查找某一行的数据时,只需要根据这一行的主键值计算出相应的哈希值,然后在哈希表中查找这个哈希值所对应的指针,再通过这个指针就可以快速找到这一行的数据。因此,哈希索引的查找效率是非常高的,基本上可以达到O(1)的时间复杂度。

img

特点

  • Hash索引只能用于对等比较(=,in),不支持范围查询(between,>,< ,…)
  • 无法利用索引完成排序操作
  • 查询效率高,通常(不存在hash冲突的情况)只需要一次检索就可以了,效率通常要高于B+tree索引

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

现在优秀企业都用SaaS知识库工具,原因就在这里

在这个信息化、知识化时代&#xff0c;企业的竞争力往往取决于能否有效管理和利用内部的知识资源。而如何实现这一任务呢&#xff1f;答案就在SaaS知识库工具。现在&#xff0c;很多优秀的企业已经使用了SaaS知识库工具进行知识管理&#xff0c;那么&#xff0c;他们为什么要这…

【洛谷 P8695】[蓝桥杯 2019 国 AC] 轨道炮 题解(映射+模拟+暴力枚举+桶排序)

[蓝桥杯 2019 国 AC] 轨道炮 题目描述 小明在玩一款战争游戏。地图上一共有 N N N 个敌方单位&#xff0c;可以看作 2D 平面上的点。其中第 i i i 个单位在 0 0 0 时刻的位置是 ( X i , Y i ) (X_i, Y_i) (Xi​,Yi​)&#xff0c;方向是 D i D_i Di​ (上下左右之一, 用…

kubadm部署kubernetes

什么是kubernetes Kubernetes是一款应用于集群的&#xff0c;容器自动部署、扩展和管理的开源平台&#xff0c;提供了一种以容器为中心的基础架构。利用kubernetes&#xff0c;你可以快速高效地响应客户如下请求&#xff1a; 应用程序的动态、精准部署应用程序的动态扩展无缝推…

【机器学习】K-近邻算法(KNN)介绍、应用及文本分类实现

一、引言 1.1 K-近邻算法&#xff08;KNN&#xff09;的基本概念 K-近邻算法&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09;是一种基于实例的学习算法&#xff0c;它利用训练数据集中与待分类样本最相似的K个样本的类别来判断待分类样本所属的类别。KNN算法…

2024福建三支一扶报名流程,超全超详细!

2024年福建三支一扶报名已经开始&#xff0c;请注意时间&#xff01; ⚠2024年福建省省级“三支一扶”计划招募岗位1070个 报名时间&#xff1a;4月1日8:00至4月17日17:00 审查考核&#xff1a;4月18日至5月10日 确定派遣人员&#xff1a;5月11日至5月31日 报名入口&#xff1…

数据质量决定大模型能力,景联文科技提供高质量大模型数据

随着大模型的深入发展&#xff0c;各类资源要素的配置状态已悄然变化。其中&#xff0c;数据的价值已被提升到一个新高度。 大模型往往拥有庞大的参数和复杂的网络结构&#xff0c;需要大量的数据来学习和优化。数据的质量和数量直接决定了模型的训练效果。若数据不足或质量不佳…

【JavaScript 漫游】【051】Set 和 Map 数据结构

文章简介 本篇文章为【JavaScript 漫游】专栏的第 051 篇文章&#xff0c;记录了 ES6 规范新增的 Set 和 Map 数据结构的相关知识点。 SetWeakSetMapWeakMap Set 基本用法 类似于数组&#xff0c;但是成员的值都是唯一的&#xff0c;没有重复的值。 Set 本身是一个构造函…

IT外包行业未来发展趋势

随着企业对高可用性系统和分布式系统需求的增加&#xff0c;IT人才外包行业迎来了前所未有的发展机遇。未来几年&#xff0c; IT外包行业将呈现出一系列发展趋势 首先&#xff0c;IT外包人才队伍将不断壮大。随着企业对人效的需求日益增长&#xff0c;以及为规避用工风险和降低…

StarRocks实战——携程火车票指标平台建设

目录 前言 一、早期OLAP架构与痛点 二、指标平台重构整体设计 2.1 指标查询过程 2.1.1 明细类子查询 2.1.2 汇总类子查询 2.1.3 “缓存” 2.2 数据同步 三、Starrocks使用经验分享 3.1 建表经验 3.2 数据查询 3.3 函数问题 四、查询性能大幅提升 五、 后续优化方…

LeetCode575——分糖果

题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 这道题比较简单&#xff0c;但我还是花费了将近四个小时的时间去解答&#xff0c;AC的那一刻&#xff0c;终于全身舒畅&#xff0c;这道题的思路就是先求出糖果的种数&#xff0c;然后我们从题中可以得出&#x…

PMP备考需要多长时间?

PMP备考需要多久&#xff1f;50天就能顺利学完 PMP考试备考时间需要看自己的工作安排了&#xff0c;学习周期要恰到好处&#xff0c;太长的话可能导致边学边忘&#xff0c;根本来不及总结冲刺&#xff1b;太短的话又会造成学习内容掌握不稳定&#xff0c;导致考试的时候发挥失…

JavaScript(一)基础

文章目录 一、JS介绍JavaScript是什么JavaScript书写位置JavaScript的注释输入输出语法字面量 二、变量变量是什么变量基本使用变量的本质变量命名规则与规范变量拓展-数组var与let的区别 三、常量四、数据类型数据类型检测数据类型数据类型转换隐式转换显式转换 简单运算符断点…

3.冒泡排序

冒泡排序 基本思想&#xff1a;每次比较两个相邻的元素 如果它们的顺序错误就把它们交换过来 重点&#xff1a;交换 时间复杂度为&#xff1a;O(n^2)&#xff08;平均情况、最坏情况&#xff09; 最优情况&#xff1a;输入的数组已经是完全有序的时候 冒泡排序只需要进行一…

day11 java不同对象的关联与内存分析 JavaBean用途及讲解 import导入包

不同对象的关联与内存分析 内存图&#xff1a; 对象的属性是另一个对象时&#xff0c;在堆内存内该属性对应的值是另一个对象的首地址&#xff08;指向另一个堆内存内另一个对象&#xff09;&#xff0c;两对象建立了联系&#xff0c;可以根据箭头间接调用。 JavaBean…

基于SpringBoot + Vue实现的员工绩效考核管理系统设计与实现+毕业论文+PPT+任务书+搭建视频

介绍 系统包含员工和管理员两个角色 管理员&#xff1a; 部门管理&#xff1a;负责创建、修改和删除部门&#xff0c;以及为部门设置权限和角色。 岗位管理&#xff1a;定义和管理岗位信息&#xff0c;包括添加、修改和删除岗位&#xff0c;以及设置岗位的职责和要求 员工…

一、企业级架构之LNMP

一、LNMP 概述 1、LNMP之间的关系&#xff1a; LNMP Linux Nginx MySQL PHP 2、配置LNMP服务器&#xff1a; (1) 克隆一台centos7虚拟机&#xff0c;修改 IP 地址 和 UUID 编号。 IP 为 10.1.1.10&#xff0c;UUID 修改后三位。 (2) 设置主机名称&#xff0c;绑定IP地…

计算机组成原理-10-控制单元的设计

10. 控制单元的设计 文章目录 10. 控制单元的设计10.1 组合逻辑设计10.1.1 CU外特性10.1.2 微操作的节拍安排10.1.3 组合逻辑设计步骤 10.2 微程序设计10.2.1 微程序设计思想10.2.2 微指令格式10.2.3 毫微程序设计10.2.4 微程序设计举例 完结撒花 本笔记参考哈工大刘宏伟老师的…

最新社交相亲系统源码PHP

最新社交相亲系统源码PHP 安装环境&#xff1a; php7.2 mysql 5.7 框架&#xff1a; 后端thinkphp6 前端&#xff1a;jquery layui PC 移动端响应式 线上案例&#xff1a;https://cjr.oemsun.com/ 主要页面及功能预览 首页 相亲资料详情页 红娘跟进记录 海报、一键复制分…

Cisco ACI Simulator 6.0(5h) - ACI 模拟器

Cisco ACI Simulator 6.0(5h) - ACI 模拟器 Application Centric Infrastructure (ACI) Simulator Software 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-acisim-6/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.o…

【核弹级安全事件】XZ Utils库中发现秘密后门,影响主要Linux发行版,软件供应链安全大事件

Red Hat 发布了一份“紧急安全警报”&#xff0c;警告称两款流行的数据压缩库XZ Utils&#xff08;先前称为LZMA Utils&#xff09;的两个版本已被植入恶意代码后门&#xff0c;这些代码旨在允许未授权的远程访问。 此次软件供应链攻击被追踪为CVE-2024-3094&#xff0c;其CVS…