聚簇索引和非聚簇索引的区别;什么是回表

news2024/11/29 20:38:06

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

什么是聚簇索引?(重点)

聚簇索引就是将数据(一行一行的数据)跟索引结构放到一块,InnoDB存储引擎使用的就是聚簇索引;

在这里插入图片描述

注意点:

1、InnoDB使用的是聚簇索引(聚簇索引默认使用主键作为其索引),将主键组织到一棵B+树中,而行数据就储存在叶子节点上,若使用"where id = 14"这样的条件查找主键,则按照B+树的检索算法即可查找到对应的叶节点,之后获得行数据。

2、若对Name列进行条件搜索,则需要两个步骤:第一步在辅助索引B+树中检索Name,到达其叶子节点获取对应的主键。第二步使用主键在主索引B+树种再执行一次B+树检索操作,最终到达叶子节点即可获取整行数据。(重点在于通过其他键需要建立辅助索引)

聚簇索引具有唯一性,由于聚簇索引是将数据(一行一行的数据)跟索引结构放到一块,因此一个表仅有一个聚簇索引,其他辅助索引可能是只有几个列的数据和索引放在一起!

表中行的物理顺序和索引中行的物理顺序是相同的,在创建任何非聚簇索引之前创建聚簇索引,这是因为聚簇索引改变了表中行的物理顺序,数据行 按照一定的顺序排列,并且自动维护(有序就一定需要维护)这个顺序;

聚簇索引中的索引默认是主键,如果表中没有定义主键,InnoDB 会选择一个唯一且非空的索引代替。如果没有这样的索引,InnoDB 会隐式定义一个6个字节大小的row_id来作为主键,这个主键会作为聚簇索引中的索引。如果已经设置了主键为聚簇索引又希望再单独设置聚簇索引,必须先删除主键,然后添加我们想要的聚簇索引,最后恢复设置主键即可。

非聚簇索引

非聚簇索引在 InnoDB 引擎中,也叫二级索引

在 MySQL 的 InnoDB 引擎中,每个索引都会对应一颗 B+ 树,而聚簇索引和非聚簇索引最大的区别在于叶子节点存储的数据不同,聚簇索引叶子节点存储的是行数据,因此通过聚簇索引可以直接找到真正的行数据;而非聚簇索引叶子节点存储的是主键信息,所以使用非聚簇索引还需要回表查询,因此我们可以得出

聚簇索引和非聚簇索引的区别主要有以下几个:

  • 聚簇索引叶子节点存储的是行数据;而非聚簇索引叶子节点存储的是聚簇索引(通常是主键 ID)。

  • 聚簇索引查询效率更高,而非聚簇索引需要进行回表查询,因此性能不如聚簇索引。

  • 聚簇索引一般为主键索引,而主键一个表中只能有一个,因此聚簇索引一个表中也只能有一个,而非聚簇索引则没有数量上的限制。

什么叫回表?(重点)

如果一个查询是先走辅助索引聚簇索引外的索引都叫辅助索引)的,那么通过这个辅助索引(innodb中的辅助索引的data存储的是主键)没有获取到我们想要的全部数据,那么MySQL就会拿着辅助索引查询出来的主键聚簇索引中进行查询,这个过程就是叫回表

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

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

相关文章

学习.NET验证模块FluentValidation的基本用法(续2:其它常见用法)

FluentValidation模块支持调用When和Unless函数设置验证规则的执行条件,其中when函数设置的是满足条件时执行,而Unless函数则是满足条件时不执行,这两个函数的使用示例如及效果如下所示: public AppInfoalidator() {RuleFor(x>…

CodeTON Round 7(D、E)

D - Ones and Twos 题意:给你一个长度为 n 的 数组 a ,其中每个元素都是 1 或 2。请处理以下两种类型的询问 "1 s":检查是否存在 a的子数组 ,其总和等于 s。 "2 i v":将 ai改为v。 如果数组 …

MySQL性能优化,SQL调优,SQL调优的手段

文章目录 对MySQL性能的优化的理解硬件和操作系统层面的优化架构设计层面的优化MySQL程序配置优化SQL优化 SQL调优有哪几种方式1.EXPLAIN2.SQL语句中IN包含的值不应过多3.SELECT语句务必指明字段名称4.当只需要一条数据的时候,使用limit 15.如果排序字段没有用到索引…

(附源码)SSM环卫人员管理平台 计算机毕设36412

目 录 摘要 1 绪论 1.1背景及意义 1.2国内外研究概况 1.3研究内容 1.4 ssm框架介绍 1.5论文结构与章节安排 2 环卫人员管理平台系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.2.2数据修改流程 2.2.3数据删除流程 2.3 系统功能分析 2.3.1 功能性…

面对困境时的力量——《难不难》与歌手荆涛的坚持

歌手荆涛演唱的《难不难》不仅是一首歌曲,更是一种精神的呈现。它告诉我们,面对问题时,只要我们坚持并勇往直前,一切困难都会变得简单。无论前方有多少险阻,总有过去的那一天,只要我们不放弃,就…

SAP smartforms二维码输出

此方法需要SAP_BASIS版本在731以上 TCODE-SE73 选择’系统条形码’点击 ‘更改’ 按步骤创建一个系统条形码 Module Size 调节二维码的尺寸 进入smartforms 创建样式 填入条形码名称 创建一张表单测试二维码,填入创建好的样式 测试结果:

快递批量查询高手软件,让你轻松掌握多家快递物流信息,提升工作效率

随着电子商务的繁荣和智能化物流的普及,快递行业在全球范围内迅速发展。在这个快节奏的时代,为了提高工作效率并更好地管理物流信息,一款强大的工具——快递批量查询高手软件应运而生。这款软件可以让你轻松掌握多家快递公司的物流信息&#…

CorelDRAW X7最新下载安装详细图文步骤教程

CorelDRAW X7是加拿大Corel公司推出的向量图形制作工具,经历二十多年的发展与蜕变,CorelDRAW系列已发布了17个版本,而CorelDRAW X7是此系列中的新版本。其完善的内容环境和强大的平面设计功能为设计师提供充分的施展舞台,是向量绘…

防火墙命令行基础配置实验(H3C模拟器)

嘿,这里是目录! ⭐ H3C模拟器资源链接1. 实验示意图2. 要求3. 当前配置3.1 PC配置3.2 FW配置(防火墙)[^7][^8]3.2.1 FW1配置3.2.2 FW2配置 3.3 R配置3.3.1 R1配置3.3.2 R2配置 3.4 SW配置3.4.1 SW1配置3.4.2 SW2配置3.4.3 SW3配置…

【漏洞复现】Array VPN任意文件读取漏洞

漏洞描述 华耀(中国)科技有限公司(简称:Array)于2003年创建于北京,是优秀的网络功能平台解决方案提供商,也是应用交付解决方案、移动应用接入(SSL VPN)解决方案的全球领导者。华耀现有员工200余人,其中研发团队占到100余人,总部位于北京。并在北京、上海、广州、杭…

二十五、DSL查询文档(全文检索查询、精确查询、地理查询、复合查询)

目录 一、全文检索查询 1、match查询 语法: 2、multi_match查询 语法: 3、match和mult_match的区别 二、精确查询 1、term查询: 语法: 2、range查询:(范围查询) 语法: 三、地理查询 1、geo_bou…

如何看待 2023 OPPO 开发者大会?潘塔纳尔进展如何?AndesGPT 有哪些亮点?

在2023年11月16日举行的OPPO开发者大会(ODC23)上,OPPO带来了全新ColorOS 14、全新互联网服务生态以及健康服务进展,这些新动态中有许多值得关注的地方。 1、全新ColorOS 14: 效率提升:ColorOS 14通过一系列…

Linux常用命令——bg命令

在线Linux命令查询工具 bg 用于将作业放到后台运行 补充说明 bg命令用于将作业放到后台运行,使前台可以执行其他任务。该命令的运行效果与在指令后面添加符号&的效果是相同的,都是将其放到系统后台执行。 在Linux系统中执行某些操作时候&…

文件属性和路径

文件属性 我们先补充一个知识: 任何新建的文件刚开始都是在磁盘上的 假设我们在文件夹中新建一个1.txt文本文档,他的大小是0KB,但是不能说明这个文件不占用磁盘空间 文件由 文件属性文件内容 组成,这里只能说明文件内容是空 文件…

rvc使用教程入门

推荐配置: GPU显卡:RTX 3060 8G CPU:lntel十二代酷睿i5或锐龙7000系以上 内存:32G RAM以上 操作系统:Windows_10系统 or Windows_11系统 注:目前AMD和英特尔的显卡延迟会比较高,建议英伟达RTX20系以上显卡使用 使用之前建议关闭GPU加速计划 操作方式:开始菜单输入图形设…

Redis-Redis 高并发分布式锁

集群分布式场景高并发 1.negix配置代理和路由 高并发场景超卖问题 1.使用原生redis控制超卖时(若是商品,则可以将商品id作为锁对象),会遇到的问题 问题一:若直接使用:将获取锁的对象和设置的超时的时间分开,则不能控…

虚拟机可ping树莓派树莓派无法ping虚拟机 的解决办法

问题描述 在学习交叉编译的过程中,发现了树莓派无法ping通虚拟机的问题。所以我尝试了各种ping,发现: 虚拟机可以ping通树莓派和主机树莓派可以ping通主机主机可以ping通树莓派和虚拟机唯独树莓派没法ping通虚拟机 尝试各种方法后找到一种…

Docker Swarm总结+Jenkins安装配置与集成(4/4)

博主介绍:Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 🍅文末获取源码下载地址🍅 👇🏻 精彩专栏推荐订阅👇🏻…

Python中zip()函数用法解析

打包 zip() 函数是 Python 中一个非常有用的函数,它用于将多个可迭代对象组合成一个元组序列,依次将来自每个可迭代对象的元素打包在一起。 基本的语法是 zip(iterable1, iterable2, ...),其中 iterable1, iterable2, ... 是要合并的可迭代…

python游戏开发pygame初步

文章目录 安装和示例移动物体优化 安装和示例 顾名思义,PyGame就是用来做游戏的Python库,提供了许多游戏开发功能,如图像处理、音频播放、事件处理、碰撞检测等等。从这个角度来说,pygame不仅是一个游戏库,同时也是一…