聚簇索引和非聚簇索引的区别

news2024/11/22 14:42:35

在 MySQL 中,B+ 树的实现主要是通过 InnoDB 存储引擎来实现的。InnoDB 存储引擎中的索引主要有聚簇索引和非聚簇索引两种类型,聚簇索引是根据主键创建的索引,⽽非聚簇索引是根据⾮主键列创建的索引。 对于非聚簇索引,MySQL 中会同时创建⼀个对应的聚簇索引,这样可以提⾼查询效率。一个表只能有一个聚簇索引,但是可以有多个非聚簇索引。

聚簇索引

聚簇索引是物理索引,因此数据表在物理上是连续存储的,且顺序按照聚簇索引顺序存储,比如在一个表中,id是主键且为聚簇索引,因此表中所有的记录行是按照id自增顺序存储,因此一个表只能有一个聚簇索引

聚簇索引的选择

  1. 如果表中有主键,则将主键作为聚簇索引
  2. 如果没主键,则将第一个组成列均非空且为唯一索引的列为聚簇索引
  3. 如果上面都不满足,则自动创建隐藏列为聚簇索引

非聚簇索引

所有不是聚簇索引的索引都叫非聚簇索引

在InnDB存储引擎中,每个非聚簇索引的每条记录都包含主键,也包含非聚簇索引指定的列。非聚簇索引主要通过记录中的主键值完成检索数据

图中id为聚簇索引,而k则为非聚簇索引,两种索引都是通过B+树实现,但是对于id的聚簇索引,需要在索引检索id=10直接可以检索出r1,而非聚簇索引则先检索k=1找到对应id=10,知道了id=10就需要在左边的ID索引树种查找id=10,然后找出r1。

整个过程从K索引树到主键索引树的过程叫做“回表”。

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

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

相关文章

神经网络 —— 模拟人脑的计算方式

神经网络能够反映人类大脑的行为,允许计算机程序识别模式,以及解决人工智能、机器学习和深度学习领域的常见问题。 人类发明的灵感来源有很多都是来自大自然,神经网络同样如此。人工神经网络是一种类似于人类神经网络的信息处理技术。但事实上…

【Linux系统化学习】进程终止的奥秘

个人主页点击直达:小白不是程序媛 Linux专栏:Liunx系统化学习 代码仓库:Gitee 目录 获取函数返回值 退出码 进程退出的场景 错误码 信号终止异常代码 进程的终止 main函数直接return exit函数 _exit函数 获取函数返回值 在C语言学…

如何像高级软件工程师一样使用vscode做开发

以一个真实的代码库为例,带您了解高级软件工程的关键原则是什么,以及如何充分利用vscode提供的各种特性来提高开发效率。您可以将学到的技巧和思想应用于任何项目。 视频地址: 如何像高级软件工程师一样使用vscode做开发 欢迎关注公众号&a…

ViT的极简pytorch实现及其即插即用

先放一张ViT的网络图 可以看到是把图像分割成小块,像NLP的句子那样按顺序进入transformer,经过MLP后,输出类别。每个小块是16x16,进入Linear Projection of Flattened Patches, 在每个的开头加上cls token和位置信息,…

云原生|对象存储|minio分布式集群的搭建和初步使用(可用于生产)

前言: minio作为轻量级的对象存储服务安装还是比较简单的,但分布式集群可以大大提高存储的安全性,可靠性。分布式集群是在单实例的基础上扩展而来的 minio的分布式集群有如下要求: 所有运行分布式 MinIO 的节点需要具有相同的访…

【Java 进阶篇】Redis 缓存优化:提升应用性能的不二选择

在现代的软件开发中,性能一直是开发者们追求的目标之一。对于数据库访问频繁、数据读取较慢的场景,使用缓存是提升性能的有效手段之一。而 Redis 作为一款高性能的内存数据库,被广泛用作缓存工具。本文将围绕 Redis 缓存优化进行详解&#xf…

《深入理解JAVA虚拟机笔记》并发与线程安全原理

除了增加高速缓存之外,为了使处理器内部的运算单元能尽量被充分利用,处理器可能对输入代码进行乱序执行(Out-Of-Order Execution)优化。处理器会在计算之后将乱序执行的结果重组,保证该结果与顺序执行的结果一致&#…

三台CentOS7.6虚拟机搭建Hadoop完全分布式集群(三)

这个是笔者大学时期的大数据课程使用三台CentOS7.6虚拟机搭建完全分布式集群的案例,已成功搭建完全分布式集群,并测试跑实例。 9 安装hbase 温馨提示:安装hbase先在master主节点上配置,然后远程复制到slave01或slave02 &#xf…

远程网络唤醒家庭主机(openwrt设置)

远程网络唤醒家庭主机(openwrt设置) 前提: 1.配置好主板bios的网络唤醒功能(网络教程自己百度一下找) 2.电脑开启网络唤醒功能(网络教程自己百度一下找) 3.路由器通过ddns实现域名和动态IP绑定内网穿透方法汇总_不修改光猫进行内网穿透-C…

【办公软件】Excel双坐标轴图表

在工作中整理测试数据,往往需要一个图表展示两个差异较大的指标。比如共有三个数据,其中两个是要进行对比的温度值,另一个指标是两个温度的差值,这个差值可能很小。 举个实际的例子:数据如下所示,NTC检测温…

JavaScript中实现页面跳转的几种常用方法

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍在JavaScript中实现页面跳转的几种常用方法以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问题…

2024收入最高的编程语言

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 1.Python Python 是最流行、用途最广泛的语言之一。它通常用于网络开发、数据科学、机器学习等。 以下是 Python 编程语言的一些主要用途: Web 开发&…

【AIGC科技展望】预测AIGC2025年的机会与挑战

2025年,AIGC的机会与挑战 在未来的五年里,AIGC(AI Generated Content)将会成为一个越来越重要的领域。但是,伴随着机会而来的是挑战。在这篇文章中,我们将一起探讨AIGC的机会与挑战,并预测2025…

WinForm开发 - C# RadioButton(单选框) 设置默认选中或取消默认选中

WinForm开发中RadioButton组件使用过程中的小技巧。 1、属性界面操作 如果有多个组件,希望不显示默认选中单选框只需要将其Checked属性全部设置为False即可, 如果希望默认多个组件中显示默认选中,将其Checked属性设置为True。 2、代码实…

GEE错误——‘xxx‘ did not match any bands.

这里我们在进行影像展示的时候会出现下面的错误,主要的原因是我们虽然进行了波段运算,但是依旧无法加载,主要原因是我们没有将计算过后的波段信息进行添加到我们的一个多波段影像,这里我们首先来看看代码出现的错误提示。当然这里只是给出了主要的问题,其实在进行波段运算…

Java——猫猫图鉴微信小程序(前后端分离版)

目录 一、开源项目 二、项目来源 三、使用框架 四、小程序功能 1、用户功能 2、管理员功能 五、使用docker快速部署 六、更新信息 审核说明 一、开源项目 猫咪信息点-ruoyi-cat: 1、一直想做点项目进行学习与练手,所以做了一个对自己来说可以完成的…

ES6的默认参数和rest参数

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…

PowerShell Instal 一键部署TeamCity

前言 TeamCity 是一个通用的 CI/CD 软件平台,可实现灵活的工作流程、协作和开发实践。允许在您的 DevOps 流程中成功实现持续集成、持续交付和持续部署。 系统支持 Centos7,8,9/Redhat7,8,9及复刻系列系统支持 Windows 10,11,2012,2016,2019,2022高版本建议使用9系列系统…

权重函数设计

1e4/(0.5*s^21*s1) 1.4125 抑制驱动器饱和 1e-4*(s1)/(0.001*s1) 10*(s10)/(s1000) 1e-6*(s1)/(0.001*s1) [0.01,0.1],[0.001,1] 0.5*(0.05*s1)/(0.0001*s0.01)

Android笔记(二十三):Paging3分页加载库结合Compose的实现分层数据源访问

在Android笔记(二十二):Paging3分页加载库结合Compose的实现网络单一数据源访问一文中,实现了单一数据源的访问。在实际运行中,往往希望不是单纯地访问网络数据,更希望将访问的网络数据保存到移动终端的SQL…