*MYSQL--索引--内部原理

MYSQL的索引根据功能,主要有三大类型:

1.HASH索引

2.二叉树

3.BTREE索引

一:HASH索引

        1.内部原理:

        在设置了某列为索引列之后,并且开始或者将要在相应索引列创建数据的时候,系统通过某种算法  F(X) 自动计算出来一个十六进制的哈希值,这个哈希值能够对应相应的字段值   所以,在之后如果使用HASH查询的时候,可以直接通过计算索引值在刚开始创建时所得的哈希值,通过这个哈希值再对应相应的索引值,达到直接搜索的目的,而不是再全表搜索,大大提高了搜索效率

        2.优点:

        通过字段值计算出相应的HASH值,定位数据,搜索数据非常的快,但是也要注意一点,不同的字段时可能够有相同的哈希值的,即一个哈希值可能够对应了多个字段,这被称为哈希冲突,但即使如此也大大缩小了查找的范围,一定程度上也提高了查找的效率

        3.缺点:

        没有办法进行范围查找,因为通过哈希值进行查找所得的都是具体的结果,并且其中的值都是无序的,无法进行大小的比较

二:二叉树

        1.内部原理:

        类似于树的形状,最上面是根节点,每一个节点最多只有两个分叉,往左为左子树,右边是右子树,同样的,往左边的一个点,或者是往右边的也是一个根节点,根节点往左均为左子树,往右均为右子树.

        2.优点:

        了解了左子树与右子树的概念之后,对与跟节点来说,其左子树都是小于它的数字,右边的数都是大于它的数字.从而使得查询速度更快一些

        3.缺点:

        1>因为这种特性,也可能会出现一些其他的情况,比如类似于链接的结构,从1-->2-->3...  这种特殊的不平衡,会使得其查询跟平常的全表查询相当,并没有用到二叉树查询


        2>同样的,这种二叉树查询也无法进行范围性的查询,需要回旋,反复的进行寻找,所以无法进行范围查询

三:BTREE

BTREE查询有两种,分别是:B-TREE  以及B+TREE两种

        1.B-TREE:

                可以先设置节点的多少,比方说MAX.DEGREE=3的时候,就代表一个节点最多只能够有2个数据,如果再多会将中间的值 向上提取 出来,再添加数据,根据数据的大小,再进行重复的操作,从而形成一个类似于树的形状

                                                       (图为以3为最大节点的B-TREE图像)

        2.B+TREE:

                B+TREE索引实际上跟B-TREE索引的大概原理是一样的,但是有一点,B+TREE索引在使用的时候,比如说设置节点最大值为3,插入0001,0002,再进行插入的时候,会将中间的'映射',向上提取出来,而操作原本的数据,并不将原本的数据向上提取,而是提取了'映射'.

                                                (图为以3为最大节点的B+TREE图像)

        TIPS:值得注意的一点是,通过这一保存原本数据的特性,我们就能够使用B+TREE索引进行范围查找了,也大大节省了磁盘扫描的时间

四.BTREE索引对于存储引擎的应用:

        1.MylSAM存储引擎:

                MylSAM存储引擎使用的是:B+TREE索引,例如,查询某个具体的值的时候,MylSAM先看索引列的值,根据指针判断其大小,之后再向下,左子树或者是右子树进行寻找,直到查询到某个需要的叶节点,叶节点的DATA存放的是数据记录的一个地址值,之后再通过地址值进行寻找,获得相应的结果

        2.InnoDB引擎:

                依旧是根据B+TREE建立的引擎,大部分跟MYLSQM有些不一样的一点就是,
    InnoDB的叶节点的DATA存储的是数据!!!而不再是一个地址值,也就是说可以直接得到相应的值,索引效率要比MYLSAM高一些,但是直接对于地址值的存放,也使得比较'吃'硬盘内存的大小.

                                                                OVER!感谢观看 

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

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

相关文章

2.openEuler概述及安装指南(二)

openEuler OECA认证辅导,标红的文字为学习重点和考点。 如果需要做实验,建议下载麒麟信安、银河麒麟、统信等具有图形化的操作系统,其安装与openeuler基本一致。 1.安装过程及配置 使用光盘引导安装: 此处以光盘安装为例介绍安装openEuler,其他安装方式除在启动安装时的…

我的NPI项目之设备系统启动(八) -- Android14的GKI2.0开发步骤和注意事项

GKI是什么? Google为什么要推行GKI? GKI全称General Kernel Image。GKI在framework和kernel之间提供了标准接口,使得android OS能够轻松适配/维护/兼容不同的设备和linux kernel。 Google引入GKI的目的是将Framework和Kernel进一步的解耦。因…

virtualenv env_name 使用 virtualenv 创建 python 虚拟环境

为什么要用这个 win7 32 环境下 pycharm 只能用低版本的,比如 2016,2018 此时pycharm 图形界面创建的 虚拟环境版本很低,有些包不兼容,因此用 virtualenv 模块,可以创建 20 版本以上的虚拟环境 virtualenv env_name官方文档 http…

java_URL中的URL编码转换成中文

问题描述 上传文件后,获得的URL中包含了URL编码,导致在前端展示文件名时出现乱码 最终效果 解决思路: 1、先按照英文逗号切割URL 2、截取字符串中URL编码部分(含后缀名) 3、使用正则匹配截取到的字符串中的URL编码 4、转换URL编码为中文&a…

React18源码: Fiber树中的全局状态与双缓冲

Fiber树构造 在React运行时中,fiber树构造位于 react-reconciler 包在正式解读 fiber 树构造之前,再次回顾一下renconciler的4个阶段 1.输入阶段:衔接react-dom包,承接fiber更新请求2.注册调度任务:与调度中心(schedu…

HarmonyOS创建一个ArkTS卡片

创建一个ArkTS卡片 在已有的应用工程中,创建ArkTS卡片,具体操作方式如下。 创建卡片。 根据实际业务场景,选择一个卡片模板。 在选择卡片的开发语言类型(Language)时,选择ArkTS选项,然后单…

QT Widget自定义菜单

此文以设置QListWidget的自定义菜单为例,其他继承于QWidget的类也都可以按类似的方法去实现。 1、ui文件设置contextMenuPolicy属性为CustomContextMenu 2、添加槽函数 /*** brief onCustomContextMenuRequested 右键弹出菜单* param pos 右键的坐标*/void onCusto…

2024如何恢复旧版的Chrome的主题样式

起因 chrome 更新版本之后的主题样式变成了浅紫色的页签卡样式,感觉很不习惯,也很不喜欢 如何换回旧版主题 通过主题商店,安装旧版本的主题 主题商店搜索下面,或着直接访问下面的地址 Chrome Original White Theme https://…

基于SpringBoot的家教管理系统

基于SpringBootVue的家教管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootMyBatis工具:IDEA/Ecilpse、Navicat、Maven 系统展示 前台主页 家教 个人中心 管理员界面 摘要 本文介绍了基于SpringBoot框架开发的家…

神经网络系列---分类度量

文章目录 分类度量混淆矩阵(Confusion Matrix):二分类问题二分类代码多分类问题多分类宏平均法:多分类代码多分类微平均法: 准确率(Accuracy):精确率(Precision)&#xf…

模型评估方式

文章目录 一、有监督-分类模型1、混淆矩阵2、分类模型的精度和召回率3、ROC曲线与AUC 二、有监督-回归模型1、均方误差MSE2、 R 2 R^2 R2决定系数3、回归模型代码示例 三、无监督模型1、kmeans求解最优k值的方法:轮廓系数、肘部法2、GMM的最优组件个数:A…

【Vue3】‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

问题 今天拿到别人项目的时候,我平时比较习惯用pnpm,我就使用pnpm i先下载依赖包,下载完成后,启动项目,就开始报以下错误! 但是当我执行pnpm i的时候,vite不应该就已经被我下载下来了吗 研究了…

线程共享和非共享的资源及线程优缺点

注意:共享的内存地址空间中不包括栈;共享文件描述符表,表示,同一进程中线程可以操作同一文件。

【机器学习】特征工程之特征选择

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…

【ubuntu】永久修改主机名

文章目录 1. 问题描述2. 解决方案 1. 问题描述 主机名过长(后面的部分) 2. 解决方案 查看主机名详情 hostnamectl修改指定主机名 hostnamectl set-hostname ubuntu2204 --static登出重进即可

基于java+springboot+vue实现的美食信息推荐系统(文末源码+Lw)23-170

1 摘 要 使用旧方法对美食信息推荐系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在美食信息推荐系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发…

虚拟机安装Docker装载Mysql

目录 1.安装docker 2. docker中安装mysql 1.选择mysql镜像 2.查看镜像 3.启动mysql 4.修改配置 5.进入容器查看配置: 6.设置启动docker时,即运行mysql 1.安装docker SSH 登录到虚拟机: 使用MobaXterm或其他SSH客户端连接到虚拟机: ss…

前后端延迟怎么解决

当今互联网应用的发展越来越迅猛,用户对于网站或应用的性能要求也越来越高。其中一个重要方面就是前后端延迟的解决,也就是减少前端与后端之间的通信时间延迟,提高用户体验。本文将详细介绍如何解决前后端延迟的问题。 网络延迟 数据在网络…

JavaSec 基础之 XXE

文章目录 XMLReaderSAXReaderSAXBuilderDocumentBuilderUnmarshaller**SAXParserFactory**XMLReaderFactoryDigester总结 XMLReader public String XMLReader(RequestBody String content) {try {XMLReader xmlReader XMLReaderFactory.createXMLReader();// 修复&#xff1a…

QoS 服务质量

服务质量 QoS (Quality of Service) 服务质量可用若干基本性能指标来描述,包括:可用性、差错率、响应时间、吞吐量、分组丢失率、连接建立时间、故障检测和改正时间等。 服务提供者可向其用户保证某一种等级的服务质量。 服务性能的总效果,…