简述MYSQL聚簇索引、二级索引、索引下推

一丶聚簇索引

InnoDB的索引分为两种:

  • 聚簇索引:一般创建表时的主键就会被mysql作为聚簇索引,如果没有主键则选择非空唯一索引作为聚簇索引,都没有则隐式创建一个索引作为聚簇索引;
  • 辅助索引:也就是非聚簇索引或二级索引,平时我们添加的索引就是辅助索引

聚簇索引并不是一种单独的索引类型,而是一种数据存储方式,就是按照每张表的主键构造一颗B+树,同时叶子节点存放的就是整张表的行记录数据,所以主键索引就默认使用到了聚簇索引;

二丶二级索引(辅助索引)

        创建一张表时默认会为主键创建聚簇索引,聚簇(主键)索引的叶子节点存的是整行数据。除了聚簇(主键)索引之外的所有索引都成为二级索引也就是非主键索引,二级索引的叶子节点内容是主键的值,主键长度越小,二级索引的叶子节点就越小,占用的空间也就越小;二级索引在查询需要多扫描一颗索引树,也就是回表,通过覆盖索引和默认的索引下推机制可以表面回表;

三丶回表

回表:就是先通过索引扫描出数据所在的行,在通过行主键索引获取其他字段数据。简单就是说:查询的字段中既有索引字段,又有非索引字段就会发生回表;比如索引字段为name

# 该查询使用了索引,并且索引中只有name的数据,但是却查询了所有字段,此时就会回表获取其他字段的值
# 通过索引name找到数据行,然后再通过主键找到其他字段值
select * from table where name = '';   
  • 主键索引查询:主键被作为聚簇索引,索引中保存了所有的列数据,可以直接通过主键定位到数据并返回;
  • 辅助索引查询:辅助索引中除了包含了索引对应字段值以及主键值,如果查询的字段全是索引字段,就直接通过索引返回数据;如果查询的字段是除了索引字段,还包含其他的字段,则通过辅助索引查找到主键,在通过主键到聚簇索引中查找对应的数据(也就是回表),可以通过聚簇索引和默认的索引下推机制可以避免回表;

四丶索引下推(Indexing Pushdown,简称CIP)

        索引下推(Indexing Pushdown,简称CIP)是一种优化查询处理的技术,尤其在数据库系统中常见。它是在数据查询的过程中,将通常由用户查询表达式处理的计算任务下推到数据存储层,比如从磁盘或内存的索引结构中直接完成部分计算,而不是等到所有的数据都被加载到内存后再进行处理。这种技术可以显著提高查询性能,因为很多复杂的聚合函数、过滤条件等可以在接近数据源的地方就得到初步的结果,减少网络传输的数据量和CPU开销。

        CIP通常发生在关系型数据库的查询优化阶段,例如SQL查询。当查询包含复杂索引结构时,如果能够利用这些索引来直接获取计算结果,而无需进一步遍历整个表,就能节省大量资源。然而,CIP也依赖于数据库系统的优化策略以及硬件的性能支持。

        CIP就是把索引扫描和索引过滤合并在一起处理,过滤后的记录数据下推到存储引擎后的一种索引优化策略。索引条件下推是默认开启的,可以使用系统参数optimizer_switch来控制是否开启

索引下推有点如下:

  • 减少了回表的操作次数
  • 减少了上传到 MYSQL SERVER层的数据

索引下推使用条件:

  • 只能用途range,ref,eq_ref,ref_or_null访问方法;
  • 只能用于InnoDB和MyISAM存储引擎及其分表;
  • 对InnoDB引擎来说,索引下推只适用于二级索引(非主键索引);
  • 引用子查询的条件不能下推;
  • 引用了存储函数的条件不能下推,因为存储引擎五大调用存储函数;
  • Mysql服务层:用来解析SQL的语法、语义、生成查询计划、接管Mysql存储引擎层上推的数据进行二次过滤等;
  • Mysql存储引擎层:按照Mysql服务层下发的请求,通过索引或者全表扫描等方式把数据上传到Mysql分服务层;
  • Mysql索引扫描:根据指定索引过滤条件,遍历索引找到索引键对应的主键值后回表过滤剩余过滤条件;
  • Mysql索引过滤:通过索引扫描并且基于索引进行二次条件过滤后在回表;

结尾:喜欢的朋友点个赞吧!!! 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KillWxapkg 自动化反编译微信小程序,小程序安全评估工具,发现小程序安全问题,自动解密,解包,可还原工程目录,支持修改Hook,小程序

纯Golang实现,一个用于自动化反编译微信小程序的工具,小程序安全利器,自动解密,解包,可还原工程目录,支持微信开发者工具运行 由于采用了UPX压缩的软件体积,工具运行时可能会出现错误报告&…

在等保测评中,如何平衡技术风险和非技术风险的评估?

在等保测评中平衡技术风险和非技术风险的评估,需要一个综合的方法来确保所有相关的风险都得到适当的考虑。以下是一些关键步骤: 1. 全面风险识别:首先识别所有可能影响组织的风险,包括技术风险(如系统漏洞、恶意软件&…

企业大模型落地从0到0.1

现在人工智能里的“大明星”——大模型,正在悄悄改变各行各业。这就像给企业装上了一颗聪明的大脑,能帮助解决各种棘手问题,提升工作效率。今天,我们就来分析下企业如何一步一步让这个“大脑”在自家地盘里真正派上用场&#xff0…

九、OpenCVSharp 中的图像形态学操作

文章目录 简介一、腐蚀1. 腐蚀的原理和数学定义2. 结构元素的形状和大小选择3. 腐蚀操作的代码实现和效果展示二、膨胀1. 膨胀的概念和作用2. 与腐蚀的对比和组合使用(如开运算、闭运算)三、开运算1. 开运算的定义和用途(去除小的明亮区域)2. 开运算在去除噪声和分离物体方…

数据结构--树与二叉树

数据结构分类 集合 线性结构(一对一) 树形结构(一对多) 图结构(多对多) 数据结构三要素 1、逻辑结构 2、数据的运算 3、存储结构(物理结构) 树的概念 树的分类 满二叉树和完全二叉树 二叉排序树 平衡二叉树 二叉树分类总结 二叉树的存储结构 …

Element-UI自学实践

概述 Element-UI 是由饿了么前端团队推出的一款基于 Vue.js 2.0 的桌面端 UI 组件库。它为开发者提供了一套完整、易用、美观的组件解决方案,极大地提升了前端开发的效率和质量。本文为自学实践记录,详细内容见 📚 ElementUI官网 1. 基础组…

Linux os下借助Qt+libvlc是实现多路拉取摄像头rtsp数据流并实时显示

前言 应客户方的一个实际项目需求,需要在Linux操作系统下拉取多路摄像头的RTSP数据流并实时显示。 该项目的硬件平台基于飞腾2000四核处理器与景嘉微显卡,搭载了Kylin V10操作系统。 当前景嘉微GPU最多支持同时连接16路摄像头,拉取1920x108…

在等保测评中,如何平衡资产识别的全面性和准确性,避免过度关注某些资产而忽视其他潜在风险?

在等保测评中平衡资产识别的全面性和准确性,避免过度关注某些资产而忽视其他潜在风险,可以通过以下策略实现: 1. 全面审计:确保进行一次全面的审计,包括所有类型的资产,避免遗漏任何关键组件。 2. 风险导…

上海亚商投顾:三大指数小幅调整,两市成交不足5000亿

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 大指数昨日窄幅震荡,临近尾盘小幅下挫。环保板块开盘大涨,永清环保、清研环境、中兰环…

OpenCV图像滤波(10)Laplacian函数的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 功能描述 计算图像的拉普拉斯值。 该函数通过使用 Sobel 运算符计算出的 x 和 y 的二阶导数之和来计算源图像的拉普拉斯值: dst Δ src ∂…

LeetCode刷题笔记第191题:位1的个数

LeetCode刷题笔记第191题:位1的个数 题目: 想法: 通过位运算判断二级制形式中有多少个1,代码及解释如下: class Solution:def hammingWeight(self, n: int) -> int:return sum(1 for i in range(32) if n & …

Latex或者word里面mathtype类型的数学公式如何变成mathematica里面的形式

详细步骤如下: 第一步:Latex里面的公式复制粘贴到word里面,转变成mathtype类型的数学公式(若已经是word里面mathtype类型的数学公式,这一步可以省略),如下: 第二步:将ma…

数字孪生赋能智慧城市大脑智建设方案(可编辑65页PPT)

引言:随着科技的飞速发展,智慧城市的建设已成为全球城市发展的新趋势。数字孪生技术作为其中的关键技术之一,正逐步赋能智慧城市大脑的建设,推动城市治理从数字化向智能化、智慧化转型升级。本方案旨在简要介绍数字孪生赋能智慧城…

Mapreduce_csv_averageCSV文件计算平均值

csv文件求某个平均数据 查询每个部门的平均工资,最后输出 数据处理过程 employee_noheader.csv(没做关于首行的处理,运行时请自行删除) EmployeeID,EmployeeName,DepartmentID,Salary 1,ZhangSan,101,5000 2,LiSi,102,6000…

VisionPro二次开发学习笔记13-使用CogToolBlock进行图像交互

该程序演示了如何使用CogToolBlock进行图像交互. 从vpp文件中加载一个ToolBlock。 用户可以通过应用程序窗体上的数字增减控件修改ToolBlock输入端子的值。 用户还可以从coins.idb或采集FIFO中选择图像。 “运行一次”按钮执行以下操作: 获取下一个图像或读取下一…

Android Studio 连接手机进行调试

总所周知,Android Studio里的虚拟手机下载后又大又难用。不如直接连手机用。本篇文章主要内容为Android Studio怎么连接手机进行程序调试。 1. 在AndroidSDK中下载google USB Driver: 2. 连接手机: 进入电脑设备管理器界面。并点开便携设备&#xff0c…

Java生成图形验证码

1、加依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency> 2、写接口&#xff0c;这块不需要登录成功才能操作的&#xff0c;所以写controller就行了…

图论:欧拉路

欧拉路是什么 什么&#xff1f;你对这个名字感到很陌生&#xff1f;再看看是图论的内容&#xff0c;感觉是不是很难&#xff1f;其实一点也不难&#xff0c;这就是生活中的一笔画问题&#xff0c;也就是不重复的经过每一条边并可以访问所有的点&#xff0c;先看看这个图&#…

PaddleOCR 图片文字提取

PaddleOCR 图片文字提取 需求一.裁剪车牌号码区域二.对车牌小图进行处理三.填充边界四.识别步骤 需求 工作上的一个需求&#xff0c;需要把图片中的车牌号码提取出来。如图&#xff0c;车牌在图片固定位置。开始使用pytesseract&#xff0c;对中文识别特别不友好&#xff0c;毕…

应对FingerprintJS反爬:Selenium的破解策略与技术详解

目录 引言 FingerprintJS技术概述 技术原理 应用场景 应对策略 高级解决方案 代码实现与案例分析 去除webdriver特征 使用Undetected_chromedriver 案例分析&#xff1a;爬取目标网站数据 结论 引言 在现代互联网环境中&#xff0c;网站反爬技术日益成熟&#xff0…