MySQL高级【索引概述索引结构】

news2024/11/25 2:28:50

目录

索引概述

无索引演示:一种表没有索引的查找方式

有索引演示:以二叉树进行演示

索引的优缺点

索引结构

二叉树: 

B-Tree(多路平衡查找树)

B+Tree树

Hash数据结构


索引概述

索引它是一种有序的数据结构,这种数据结构是用来做什么的?用来高效获取数据的,

在我们的数据库表结构当中,除了要保存原始数据之外,

还需要去维护索引这种数据结构,那么要通过这种数据结构来指向原始数据,

这样就可以在这种数据结构当中通过高级的查找算法,快速定位到原始数据,

这种数据结构就叫做索引

无索引演示:一种表没有索引的查找方式

我要查找age=45的人的信息,这个时候,就会根据sql语句在表中进行查找

依次查找每一条数据,进行比对,符合条件就查找到了,没有符合条件的就

查找到数据的最底部,这种是无索引表的查找方式,被称为全表扫描

有索引演示:以二叉树进行演示

如果以age建立索引,就需要去维护这样一个二叉树,当我们往

这种表中插入一条数据时,那么就需要维护这个二叉树

的节点, 那么这个二叉树的节点就需要指向这条数据的地址

,再插入一条数据二叉树的新节点就指向这条数据的新地址

再重新查找age =45 的 它会先比对头节点,比头节点大

就去右边比对,小就去左边树比对

这个二叉树并不是真实的索引结构,只是为了理解

索引的优缺点

优点:

1,降低数据库的IO成本,因为数据库的数据是操作磁盘的,你要操作数据就会和磁盘进行交互,有了索引,降低了交互次数,从而也减少IO成本(提高了查询效率)

2, 通过索引对数据进行了重新排序,降低了以往数据排序的成本,降低了cpu的消耗(提高了排序效率 )

3,提高了数据的检索效率

缺点:

1,索引需要占用磁盘空间(可以忽略)

2,降低了更新的表的速度,但是(一般在考虑给表加索引的时候,这两点可以忽略不及,

磁盘很便宜,2在正常的业务系统中,增删改的比例很小,主要是查询)

索引结构

不同的存储引擎存在不同的索引结构,而不同的索引结构是由不同的数据结构实现的

mysql的索引是在存储引擎层实现的,不同的存储引擎有不同的结构,主要包含,B+Tree索引,Hash索引,R-tree索引(空间索引),Full-text(全文索引)

索引结构描述
B+Tree索引最常见的索引类型,大部分引擎都支持 B+ 树索引
Hash索引底层数据结构是用哈希表实现的, 只有精确匹配索引列的查询才有效, 不 支持范围查询
R-tree(空间索 引)空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类 型,通常使用较少
Full-text(全文 索引)是一种通过建立倒排索引,快速匹配文档的方式。类似于 Lucene,Solr,ES

 上述是MySQL中所支持的所有的索引结构,接下来,我们再来看看不同的存储引擎对于索引结构的支持 情况。

索引InnoDBMyISAMMemory
B+tree索引支持支持支持
Hash 索引不支持不支持支持
R-tree 索引不支持支持不支持
Full-text5.6版本之后支持支持不支持

注意: 我们平常所说的索引,如果没有特别指明,都是指B+树结构组织的索引。

二叉树: 

 

二叉树:每个节点下有两个节点,插入的形式是,当第一个节点是36,插入第二个数据比36小放入左侧,比36大就放入右侧,最终形成二叉树

如果进行查询上图中的17数据,查找次数为:

第一次:比较头节点36,不匹配第一次查询,比36小进入左侧节点进行比较

第二次:17和左侧节点22进行比较,不匹配,比左侧节点小,进入下一层的左侧节点

第三次:17和左侧节点19进行比较,不匹配,比左侧节点小,进入下一层的左侧节点

第四次:17和左侧节点17进行比较,不匹配,数据值相等,完成查询

总共查询四次

二叉树的两个弊端:

第一个弊端:

当数据顺序插入一组数据,最终形成了一个单项链表,例如插入一组

 

36,34,33,23,22,20,19,17

这时顺序插入时会形成单项链表,查询性能会大大降低

因为:这是查询17,第一次比对36,第二次比对34,第三次比对33,第四次比对23,第五次比对22,第六次比对20,第七次比对19,第八次比对成功

这时:查询次数是八次,次数大大的提升,就造成了查询性能大大降低。

第二个弊端:

在大数据的情况下,二叉树的层级就变得很深,因为每个节点下面只能挂载两个节点,大数据量的情况下,会形成很大的层级,层级变深,查询次数加大,检索速度很慢

第一个弊端解决:

就引入了红黑树,红黑树是一个自平衡的二叉树,当顺序插入时,形成了单项列表,红黑树通过本身的特性左旋一下右旋一下,构成了一个平衡的二叉树

 

这时重新查找17,只需要四次,提高了一倍的检索效率,第一次弊端就解决

当然:红黑树也是一个二叉树,在数据量大的情况下,也同样存在检索效率变慢的问题

为了解决这个问题,就引入了另外一种数据结构,B-Tree

B-Tree(多路平衡查找树)

多路:为什么要称为多路呢!多路就是一个节点下可以挂载多个子节点

例如:一颗最大度数(max-degree)为5(5阶)的b-tree,(每个节点下有五个节点,每个节点可以存储四个key,5个指针进行指向)

树的度数:是指一个节点的子节点个数

 

B+Tree树

B+Tree

第一个特点:所有的数据都会出现在叶子节点,就是说下一层的叶子节点会包含上一次非叶子节点的数据

,非叶子节点起到一个指向的作用

第二个特点:叶子节点会形成一个单向的链表!

 

在MySQL索引数据结构对经典的B+Tree进行了优化,!在B+tree的基础上面,增加了一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+Tree,提高区间访问时候的性能!

Hash数据结构

 

采用hash作为索引结构,哈希索引就是采用一定的hash算法,将键值通过算法换成新的hash值,然后存储在hash表中。

如果两个(或多个)键值,映射到一个相同的hash表的槽位中,他们就产生了hash冲突(也成为hash碰撞),可以通过链表进行解决

(如果hash表中有相同的hash值,那就给这个hash值对应hash表中的槽位,赋予一个链表,将冲突的值依次追加到链表中)

 

Hash索引的特点

1,hash索引只能用于等值查询(=,in),不支持范围查询(between,<,>)

2,无法利用索引完成排序操作,因为hash算法出来的hash值是无序的

3,查询效率高,通过只需要一次检索就可以了,效率通常要高于B+tree索引(这边通常是指不出现hash碰撞的情况下,如果出现hash冲突,还需要进行查找链表,这时效率会影响)

在Mysql中,支持hash索引的是Memory引擎,而InnoDB中具有自适应hash功能,hash索引是存储引擎根据B+Tree索引在指定条件下自动构建的

 

 

 

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

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

相关文章

测开真的是测试工程师的发展终点吗?

前言 在一线大厂&#xff0c;没有测试这个岗位&#xff0c;只有测开这个岗位&#xff0c;即使是做业务测试&#xff0c;那么你的title也是测开。 所以想聊一聊测开的看法&#xff0c;但不代表这是正确的看法&#xff0c;仅供参考。 没来阿里之前我对测开的看法 一直以为专职…

Docker入门 --- 简单安装及部署

Docker的简单安装及部署 文章目录Docker的简单安装及部署一、Docker概述1. 什么是Docker2. Docker架构3. DockerHub4. Docker运行模式5. Docker和虚拟机的区别二、安装Docker1. 环境准备2. 安装3. 配置镜像加速器三、Docker服务、镜像、容器命令1. 服务(进程)相关命令2. 镜像相…

【大数据处理技术】「#2」Hive数据分析

文章目录操作Hive简单查询分析测试简单指令查询条数统计分析关键字条件查询分析以关键字的存在区间为条件的查询根据用户行为分析用户实时查询分析操作Hive 启动Hive在“hive>”命令提示符状态下执行下面命令&#xff1a; hive> use dbtaobao; # 使用dbtaobao数据库 hi…

1.7 TCP粘包、缺包问题解决

文章目录1、TCP粘包问题1.1、客户端粘包现象1.2、服务端粘包1.3、粘包、缺包解决2、包头设计1、TCP粘包问题 1.1、客户端粘包现象 因为客户端有一个优化算法(Nagle)&#xff0c; send(“abc”); send(“123”); send(“def”); 如果这三次发送非常紧密时间非常短&#xff0c;会…

一、Endnote简介

一、简介 1.Edit-Preference-Libraries&#xff1a;设置默认打开时的操作。&#xff08;默认打开最近一次&#xff09; 2.文献库的建立File-New 生成一个数据库文件和一个文件夹 3.在线数据库搜索 &#xff08;1&#xff09;设置不同的检索字段&#xff1a; &#xff08;2&am…

零基础小白想学Python爬虫,但是不理解原理?5分钟带你理顺思路

很多人私信我&#xff0c;说自己是0基础学习Python&#xff0c;但是学爬虫的时候不太理解这个原理&#xff0c;下面我来给大家分享一下我的对Python爬虫的原理。 首先我们要知道什么是Python爬虫&#xff1f; 我们可以把互联网看成是各种信息的站点及网络设备在一起组成的一…

UG/NX二次开发Siemens官方NXOPEN实例解析—2.1 AssemblyViewer

列文章目录 UG/NX二次开发Siemens官方NXOPEN实例解析—2.1 AssemblyViewer 目录 列文章目录 前言 一、知识点提取汇总 二、案例需求分析 1、最终效果图 2、需求分解 三、程序分析 1、源码所在目录 2、主要功能分析 前言 随着工业智能化的不断发展&#xff0c;UG二次开发…

[1]物联网基础知识

前言 学习教程&#xff1a;B站太极创客&#xff0c;原教程采用的开发板为ESP8266&#xff0c;开发环境Arduino 本人使用开发板&#xff1a;ESP32S3&#xff0c;开发环境Vscode中的platformio&#xff0c;框架为Arduino 乐鑫科技&#xff1a;ESPRESSIF 注意&#xff1a;引脚…

机器人开发--CanOpen

机器人开发--CanOpen1 介绍1.1 概述1.2 应用2 历史发展3 协议3.1 协议细节&#xff08;来自CiA文档&#xff09;3.2 协议框架OSI 模型服务COB-IDNMTSYNC紧急事件对象 (EMCY)服务数据对象 (SDO)SDO 下载SDO 上传SDO 加速写传输报文过程数据对象PDO3.3 应用细节&#xff08;伺服电…

基于springboot+mybatis+mysql+layui员工工资管理系统

基于springbootmybatismysqllayui员工工资管理系统一、目的二、需求功能划分系统结构设计软件界面截图三、系统开发配置一、目的 ​ 运用JavaEE企业级系统开发、数据库系统、面向对象技术及UML以及软件需求工程所学专业知识&#xff0c;解决所设定业务领域软件开发中的需求分析…

2021一带一路暨金砖大赛之企业信息系统安全赛项AWD_writeup

更多详情私聊博主 订阅专栏解锁更多~~觉得不错麻烦点个赞~~~ AWD_writeup 主要考点:后门账户、数据库操作、cve漏洞、后门漏洞、自动化攻击 1、解法一 ssh弱口令账户 用户登录后cat /etc/passwd 发现系统存在额外账户 使用msf进行ssh爆破尝试 msfconsole use auxiliary/sca…

洛谷 最长公共子序列

LCS 题面翻译 题目描述&#xff1a; 给定一个字符串 sss 和一个字符串 ttt &#xff0c;输出 sss 和 ttt 的最长公共子序列。 输入格式&#xff1a; 两行&#xff0c;第一行输入 sss &#xff0c;第二行输入 ttt 。 输出格式&#xff1a; 输出 sss 和 ttt 的最长公共子序…

程序的动态链接(4):动态链接信息

前言 操作系统在执行动态链接的可执行文件时&#xff0c;会首先加载动态链接器&#xff0c;然后由动态链接器根据保存在可执行文件中的动态链接信息&#xff0c;完成依赖动态库的加载、符号解析以及重定位等工作。这些动态链接信息包括但不限于&#xff1a; 动态链接器路径&a…

联邦调查局和国际执法合作加强打击非法DDS攻击

©网络研究院 美国司法部在12月14日查封了48个出售“booter”或“stresser”服务的域名&#xff0c;这些服务使非技术用户可以轻松、廉价地发起强大的分布式拒绝服务(DDoS)攻击&#xff0c;旨在离线攻击目标。 司法部还指控六名美国男子犯有计算机罪&#xff0c;他们涉嫌…

基于simulink的PV光伏发电MPPT仿真

up目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 由于人口增加、城市化和工业化&#xff0c;能源需求与日俱增&#xff0c;可再生能源是我们传统能源的替代品&#xff0c;因为传统能源是有限的&#xff0c;而且会过期。 太阳能、风能和水能等清洁能源变得越来越…

老生常谈React的diff算法原理-面试版

第一次发文章 not only&#xff08;虽然&#xff09;版式可能有点烂 but also &#xff08;但是&#xff09;最后赋有手稿研究 finally看完他你有收获 diff算法&#xff1a;对于update的组件&#xff0c;他会将当前组件与该组件在上次更新是对应的Fiber节点比较&#xff0c;将比…

关于2022年国内软件质量调查问卷的一些感悟与收获

&#x1f4cb;前言 1️⃣关于2022年国内软件质量调查主题征文活动 CSDN《2022年国内软件质量调查》正式开启&#xff0c;我们诚邀各位博主&#xff0c;特别是测试领域的各位技术er参与调查&#xff0c;并围绕主题&#xff0c;撰写《我填写“2022年国内软件质量调查问卷”的感想…

刷了一个月面试题,终于拿到了字节跳动的offer

一面 自我介绍项目中的监控&#xff1a;那个监控指标常见的有哪些&#xff1f;微服务涉及到的技术以及需要注意的问题有哪些&#xff1f;注册中心你了解了哪些&#xff1f;consul 的可靠性你了解吗&#xff1f;consul 的机制你有没有具体深入过&#xff1f;有没有和其他的注册…

(二)fiber的基本认识

上一篇文章我们了解了react新老结构的差异以及存在的缺点&#xff0c;其中react的解决方案就是采用fiber架构和添加Schedule模块。 ✍️&#xff1a;Schedule模块的主要工作是任务的调度&#xff0c;负责调度不同优先级任务的执行时机&#xff0c;这个我们后面再讲&#xff0c;…

Ardor公链生态与Jelurida产业区块链布局

Ardor公链 Ardor公链&#xff08;ARDR&#xff09;基于NXT公链&#xff0c;并于2018年1月1日推出了多链架构&#xff0c;旨在克服单链本质上的局限性。根据Ardor平台的白皮书&#xff0c;其主要目标是&#xff1a; 解决最终用户必须拥有作为手续费&#xff08;Gas费&#xff…