简述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索引过滤:通过索引扫描并且基于索引进行二次条件过滤后在回表;
结尾:喜欢的朋友点个赞吧!!!
相关文章:

简述MYSQL聚簇索引、二级索引、索引下推
一丶聚簇索引 InnoDB的索引分为两种: 聚簇索引:一般创建表时的主键就会被mysql作为聚簇索引,如果没有主键则选择非空唯一索引作为聚簇索引,都没有则隐式创建一个索引作为聚簇索引;辅助索引:也就是非聚簇索…...

电脑开机后出现bootmgr is missing原因及解决方法
最近有网友问我为什么我电脑开机后出现bootmgr is missing,这个提示意思是:意思是启动管理器丢失,说明bootmgr损坏或者丢失,系统无法读取到这个必要的启动信息导致无法启动。原因有很多,比如我们采用的是uefi引导,而第…...

2024 年 7 月公链行业研报:市场波动中 Solana 表现抢眼,Layer 2 竞争白热化
作者:Stella L (stellafootprint.network) 数据来源:Footprint Analytics 公链 Research 页面 7 月份,加密货币市场表现活跃,波动幅度较大,这一现象映射了全球金融市场的整体趋势。现货以太坊 ETP 在美国的上市&…...
Python查缺補漏
一、 json.load(s)与json.dump(s)区别 json.loads()将str类型的数据转换为dict类型 json.dumps()将dict类型的数据转成str json.load()从json文件中读取数据 json.dump()将数据以json的数据类型写入文件中 二、json内部要使用双引号 data """{ "fruit&qu…...

c++的类和对象(中):默认成员函数与运算符重载(重难点!!)
前言 Hello, 小伙伴们,我们今天继续c的学习,我们上期有介绍到c的部分特性,以及一些区别于c语言的地方,今天我们将继续深入了解c的类和对象,探索c的奥秘。 好,废话不多说,开始我们今天的学习。…...
Android .kl按键布局文件
1.介绍 一个硬件按键的处理流程大致为:当用户按下或释放一个键时,键盘硬件会生成一个扫描码scan code,然后操作系统读取这个scan code,并将scan code扫描码映射到虚拟键码key code,最后操作系统根据映射的keycode生成…...

Java每日一练_模拟面试题6(JVM的GC过程)
一、JVM虚拟机组成 JVM五大内存区域:程序计数器,Java虚拟机栈,本地方法栈,java堆,方法区。 堆被划分为两个区域:年轻代(Young)、老年代(Tenured)。年轻代又被划分为三个区域:Eden、From Surviv…...

数据防泄密软件推荐|(6大数据防泄密软件推荐!)
很多朋友在后台私信,什么是数据防泄密软件,有哪些数据防泄密软件推荐。 今天小编将从定义出发,深入浅出地介绍这一技术的工作原理、应用场景以及实现方式。 一、什么是文档透明加密? 文档透明加密是一种在用户无感知的情况下对文…...
Codeforces 874 div3 A-G
A. Musical Puzzle 分析 每两个相邻的字母都要录制一段,开个set记录一下,然后输出set的大小 C代码: #include<iostream> #include<set> using namespace std; void solve(){int n;string s;cin>>n>>s;set<strin…...

暑期数据结构 空间复杂度
3.空间复杂度 空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度。 空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟…...

【Android Studio】图标一键生成 Image Asset Studio(一键各机型适配图标生成工具-告别一个一个替换)
文章目录 方法一:原始替换方法二:Image Asset Studio 方法一:原始替换 https://blog.csdn.net/xzzteach/article/details/140821856 方法二:Image Asset Studio 自动替换所有机型图标...

C++ | Leetcode C++题解之第332题重新安排行程
题目: 题解: class Solution { public:unordered_map<string, priority_queue<string, vector<string>, std::greater<string>>> vec;vector<string> stk;void dfs(const string& curr) {while (vec.count(curr) &am…...
使用Python实现简单的网页爬虫:抓取网站标题
使用Python实现简单的网页爬虫:抓取网站标题 在当今数据驱动的时代,网络爬虫(Web Crawler)成为了获取和分析网络数据的重要工具。无论是数据科学、市场分析还是学术研究,爬虫都能帮助我们从互联网上提取有价值的信息。本文将介绍如何使用Python实现一个简单的爬虫,抓取某…...

视觉SLAM ch3—三维空间的刚体运动
如果对于某些线性代数的知识不太牢固,可以看一下我的另一篇博客,写了一些基础知识并推荐了一些视频。 旋转矩阵 单元所需的线代基础知识https://blog.csdn.net/Johaden/article/details/141023668 一、旋转矩阵 1.点、向量、坐标系 在数学中&…...

计算机毕业设计选题推荐-二手图书交易系统-Java/Python项目实战
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...

4.MySQL数据类型
目录 数据类型 编辑数值类型 tinyint类型 bit类型 float类型 decimal类型 字符串类型 char类型 varchar varchar和char的区别 日期和时间类型 数据类型 数值类型 说明一下:MySQL本身是不支持bool类型的,当把一个数据设置成bool类型时&#x…...

快递查询新纪元:一键批量获取多家快递物流详情
跨快递平台批量查询神器:一站式解决信息追踪难题——固乔快递查询助手 在电商行业日益繁荣的今天,快递服务已经成为连接买卖双方不可或缺的一环。然而,随着合作的快递公司日益增多,如何高效地管理和追踪不同平台的快递信息&#…...
docker部署redis和mongoDB
docker部署mongoDB redismongoDB redis # --requirepass指定redis连接时的密码 # --appendonly yes 开启reids的AOF功能 docker run --name redis -p 6379:6379 -d redis:5.0.14 redis-server --requirepass 1234 --appendonly yes# 以/etc/redis/redis.conf的配置信息启动red…...

了解LVS,配置LVS
项目一、LVS 1.集群Cluster Cluster: 集群是为了解决某个特定问题将堕胎计算机组合起来形成的单个系统 LB:负载均衡 HA:高可用 HPC:高性能计算 2.分布式 分布式是将一个请求分成三个部分,按照功能拆分,使用微服…...

目标检测综述文章解读——Object Detection in 20 Years: A Survey
论文:Object Detection in 20 Years: A Survey 作者:Zhengxia Zou, Keyan Chen, Zhenwei Shi, Yuhong Guo, Jieping Ye 链接:https://arxiv.org/abs/1905.05055 这是一篇关于目标检测综述性文章,自2019年5月第一次提交后ÿ…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...