高性能MySQL(3th)(第六章 sql优化) —— 06 查询优化器的工作

SQL子查询与CTE:构建可读、可维护、可协作的数据分析逻辑 SQL子查询和CTE是数据分析师从‘查数据’迈向‘建模型’的核心能力。它们并非语法进阶,而是解决多层业务逻辑嵌套的结构化思维工具——子查询显性化计算依赖链,CTE将分析流程拆解为带业务语义的可复用模块。相比硬拼JOIN或滥用临时表,二者显著提升代码可读性、协作效率与调试能力,尤其适用于RFM用户分层、留存漏斗、动态排名等典型分析场景。在MySQL 8.0+及PostgreSQL中,合理运用标量子查询、行子查询、表子查询,并规避CTE命名冲突、递归失控、性能幻觉等陷阱,是保障分析结果准确、稳定、可交付的关键工 阅读详情

一 优化器在MySQL架构中的位置:

二 先看逻辑上的作用

一言以蔽之:找到最好的执行计划。

 

三 静态优化和动态优化

这个和一般的编译器优化的区别差不多,静态优化即语法上的转换,替换常量等等,动态优化则要考虑实时的运行状态,选择最优的执行路线。

四 优化器常见的工作

简单的表达式中进行常量的等价替换:

MIN MAX COUNT:

外连接转化为内连接:

这里有个补充的小知识,内连接 左外连接 右外连接 全外连接 自然连接在结果上的区别,和在MySQL执行引擎运算过程上的区别。

 

连接查询时,where条件中对于连接列的限制,将会对两张都起作用,这样无论以哪张表为基础进行连接运算,该限制条件都能起到过滤的作用:

IN 的优化:

我们先从OR来认识一下where字句的过滤作用:

这里先不看为主键(索引)的id,只将其看作普通的一列,OR的过滤作用是这样的:

先按 type的方式(上例中是走全表扫描)进行扫描,对每一条记录,用where条件去筛选即判断是否符合该条件。对于多个OR而言,其实就是遍历这个OR序列,有一个满足则将该记录加入结果集,故复杂度为O(n)。

而就如上面的文字截图所述,MySQL对IN做了优化,将IN内的数值进行大小排序,这样扫描到一条记录时,就不用顺序遍历地去判断该值是否存在,直接走二分查找,复杂度为log(n),当然,这个对于IN有很多值时二者的效率区别才会显现出来。

 

 

其他的还有,但是这里不再展开:

 

 

 

技术分享| 二进制部署MySQL ​MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。​MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。​。 阅读详情

相关推荐

MySQL 8.0.42安全更新深度解析:CVE漏洞修复与生产环境升级指南

数据库安全是保障数据资产的核心,其权限系统与查询优化器是支撑服务稳定运行的关键组件。权限系统通过矩阵化管理控制用户访问,而优化器则负责生成高效执行计划以提升查询性能。这些基础机制的技术价值在于,它们共同构成了数据库抵御攻击、维持高可用的第一道防线。在实际应用场景中,任何逻辑缺陷都可能导致权限提升或拒绝服务等严重风险,进而威胁业务连续性。本文聚焦于MySQL 8.0.42版本修复的多个CVE安全漏洞,深入剖析了涉及权限提升和拒绝服务攻击的具体原理与危害。通过结合【权限提升】与【拒绝服务攻击】等关键热词,我们将

weixin_34239592的博客 425

mysql查询优化器

查询优化器是mysql中非常重要且复杂的部件,mysql优化器优化策略分为静态优化和动态优化:静态优化可以直接对解析树进行分析并完成优化,不依赖于特别的数值,依次完成后就一直有效,如通过简单的代数变换将where条件转换成另一种等价形式; 动态优化和查询的上下文有关,也可能和多种其他因素有关,如where条件的取值、索引中条目对应数据行数等,它需要每次在查询的时候进行评估,可以理解为 “运行时优化”。 mysql能处理到的优化类型: 重新定义关联表顺序:数据表的关联不会总是按照在查询中指定顺序进行,关联

zhoushimiao1990的博客 888

sysbench压测实战:从硬件评估到MySQL性能调优完整指南

性能压测是数据库与系统架构领域的核心实践,旨在通过模拟负载提前发现瓶颈。其原理在于建立可控、可复现的基准环境,通过工具生成压力,量化系统在吞吐量、延迟等维度的表现。这一技术的核心价值在于为硬件选型、参数调优与架构决策提供数据支撑,是保障服务稳定性与可扩展性的关键环节。在MySQL生态中,sysbench作为权威的基准测试工具,通过模拟OLTP读写、CPU计算、内存带宽及磁盘IO等场景,能够系统性地评估从底层硬件(如CPU、SSD)到数据库服务(如InnoDB引擎)的全链路性能。本文将以sysbench为核心

dianxiangong2403的博客 360

msyql性能优化--静态化

1. 索引设计依据 与数据表有关系的 sql 语句都统计出来 where ,order by,or 等等条件的字段适当做索引   2. 索引设计原则: 频率高的sql语句 执行时间长的sql语句 业务逻辑重要的sql语句   3. 什么样子字段不适合做索引? 内容比较单调的字段不适合做索引   4. 前缀索引 一个字段只取前边的几位内容做索引 好处:索引空间比较少、运行...

daicooper的博客 722

Hive数据插入实战:从INSERT INTO到LOAD DATA的深度解析与性能优化

在大数据生态中,数据仓库的核心任务之一是实现高效、稳定的数据入库。Hive作为基于Hadoop的数据仓库工具,其数据插入机制与传统关系型数据库有本质区别,它深度依赖于HDFS的存储模型和批处理计算框架。理解Hive的数据写入原理,需要从HDFS的一次写入、多次读取特性出发,认识到每次插入操作都可能触发一个分布式计算作业(如MapReduce、Tez或Spark),生成新的数据文件。这种设计虽然牺牲了实时性,却换来了处理海量数据的能力和高吞吐量。从技术价值看,掌握Hive的多种数据插入方式,能直接提升ETL流

weixin_30546189的博客 445

低代码Agent开发框架使用指南(二)—Coze平台核心功能概览

本篇分享系统介绍了字节跳动推出的低代码智能体开发平台Coze。Coze以免费易用、多模型支持和便捷的跨平台发布为核心优势,显著降低了智能体开发门槛。文章详细解析了平台的六大核心功能:扩展能力边界的插件系统、增强认知的知识库、结构化数据管理的数据库、可视化图像处理的图像流、实现复杂逻辑编排的工作流,以及处理复杂任务的多智能体协作机制,全面展现了Coze平台的强大能力。

weixin_42782643的博客 1358

突破大数据瓶颈:ShardingSphere OLAP查询优化实战指南

你是否正面临海量数据查询延迟、分析效率低下的困扰?在数据爆炸的时代,传统数据库架构已难以应对OLAP场景下的复杂查询需求。本文将深入剖析ShardingSphere在大数据OLAP场景中的查询优化方案,通过实战案例展示如何利用分布式SQL引擎提升查询性能,让你轻松掌握百亿级数据的高效分析技巧。 ## 为什么选择ShardingSphere优化OLAP查询 Apache ShardingSphe...

gitblog_00851的博客 914

九齐NY8B062F单片机:12位ADC与4路PWM在智能家居控制中的实战应用

本文详细介绍了九齐NY8B062F单片机在智能家居控制中的实战应用,重点解析其12位ADC高精度传感器数据采集和4路PWM精准驱动技术。通过实际案例展示如何利用该单片机实现温湿度监测、灯光调节及电机控制,并分享低功耗设计与抗干扰方案,为低成本高可靠性的智能家居设备开发提供完整解决方案。

rnn9storyteller的博客 730

SQL性能优化实战:从慢查询到高效执行的10倍速提升

数据库查询性能是系统效率的核心指标,SQL优化通过减少I/O操作和计算量显著提升响应速度。其原理在于利用索引快速定位数据、优化执行计划避免全表扫描,并通过查询重写消除性能瓶颈。在电商、金融等数据密集型场景中,良好的SQL优化能使查询速度提升10-100倍,直接影响用户体验和业务指标。本文以MySQL索引优化和查询重写为重点,结合执行计划分析和慢查询监控,详解如何将8秒查询优化至80毫秒的实战案例,涵盖覆盖索引、JOIN优化、分页技巧等高频热词技术点。

weixin_30536513的博客 343

RWEQ土壤风蚀模型的估算与变化归因分析

本次以介绍RWEQ模型的基本原理及数据需求,再结合案例讲解RWEQ模型中区域地理空间数据库构建的方法和各个参量提取的原理与方法,最后结合典型案例进行综合讲解风蚀模数估算、制图及归因分析。空间分析与制图:提取分析、局部分析、邻域分析、区域分析、插值分析、平滑处理、像元提取、采样与重采样。以某实际应用为案例,掌握RWEQ模型进行当地土壤风蚀量空间分布分析整体流程。地图服务器、在线地图、范围指示器、格网、表格、基础地图服务使用规则介绍。掌握土壤风蚀模型的原理、优势点及因子组成。

2301_77413856的博客 1193

PromptBio实战:如何用AI对话搞定转录组数据分析(附详细操作截图)

本文详细介绍了如何利用PromptBio平台通过AI对话完成转录组数据分析,无需编程基础即可实现从数据上传到结果解读的全流程。文章包含详细的操作截图和参数配置建议,帮助科研人员快速掌握这一生信分析工具,显著提升研究效率。

weixin_30872157的博客 133

数据库——MySQL

MySQL数据库基础教程全面介绍了关系型数据库的核心概念和操作。

qq_46518480的博客 417

如何打开本地网络的防火墙端口(Windows版)解决ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。问题

ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。 最开始在遇到这个报错的时候十分不解,后来经过思考,有可能是服务器端口占用,或者并没有放行。因此搜查问题的关键是要先去排查问题。 在搜索栏输入控制面板 选择防火墙 选择开关 保证这些选项是开着的 选择高级设置 新建规则 创建协议端口 选择端口 允许连接 点击下一步 创建规则后点击下一步(后命名) 选择任意端口ALL即可 问题排查完毕!socket创建网络通信时,有读者

weixin_46900108的博客 9万+

SQL性能突降排查:从CPU飙升到执行计划劣化的全链路诊断

在实际数据库运维和开发工作中,SQL性能突然劣化是典型的线上故障场景。一条昨天执行还很快的查询,今天突然变得极慢,不仅直接影响用户体验,更可能瞬间耗尽数据库资源,导致CPU飙升、连接池打满,甚至引发服务雪崩。这类问题排查起来往往时间紧迫,需要一套清晰、高效的诊断思路,而不是盲目地重启服务或添加索引。 本文将以一个虚构但典型的场景为例:一条线上核心SQL,昨日平均执行时间50毫秒,今日突然飙升至5秒,数据库服务器CPU使用率随之达到90%。我们将模拟一位资深DBA或开发者的视角,从现象出发,层层递进,构建一套

weixin_34310369的博客 325

IMEI引起的无法驻网问题

问题不复杂,场景很简单,如上图,UE在进行LTE attach过程时,在送完NAS security mode complete后,就立刻收到了网络attach reject 带cause 6 Illegal ME,根据协议描述这个cause 代表ME不被网络可接受,例如ME在禁止名单或者黑名单中就会有这种cause。然而前方在报这个问题的时候,也是知道SIM卡和手机IMEI在运营商那边没能成功绑定,然后才报的问题,要查看手机是不是有问题...... 告诉前方原因后,还认为是手机问题,告知要继续查。

asd199086的博客 1426

YOLOv11改进有效涨点专栏目录 | 含卷积、主干、注意力机制、Neck、检测头、损失函数、二次创新C2PSA/C3k2等各种网络结构改进

Hello,各位读者们好.本文为最新YOLOv11有效涨点专栏目录,YOLOv11以及发布了一个月左右,这个过程中我也是给大家整理了许多的机制,其中包含了C3k2、主干(均支持根据yolov11训练的版本进行二次缩放,全系列都能轻量化)、检测头、注意力机制、Neck多种结构上创新,也有损失函数和一些细节点上的创新。

Snu77的博客 8万+

二进制部署 MySQL

二进制部署 MySQL

m0_60259116的博客 1067

滤波算法实现大全——基于匀速直线运动模型的kalman滤波算法

滤波算法实现大全——基于匀速直线运动模型的kalman滤波算法

jane0819的博客 522

MySQL 深入理解-专辑demo

MySQL 采用分层架构设计,从上到下分为四层: 1.1.1 连接层 连接管理:处理客户端连接、认证、授权 连接池:复用已建立的连接,减少连接开销 线程模型:每个连接分配一个线程(One-Thread-Per-Connection) 1.1.2 服务层 服务层是 MySQL 的核心,包含 SQL 处理的完整流程:SQL 执行流程: 1.1.3 存储引擎层 MySQL 的插件式存储引擎架构是其最大特色: 1.2 MySQL 8.0 新架构特性 1.2.1 数据字典重构 MySQL 8.0 使用事务性数据

_abab的专栏 285

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MySQL CASE WHEN语句详解与应用实践

条件判断是SQL查询中的基础功能,MySQL的CASE WHEN语句提供了强大的条件逻辑处理能力。作为标准SQL语法,CASE WHEN通过条件表达式实现类似编程语言的if-else逻辑,能够在数据库层面高效处理业务规则。其技术价值体现在减少数据传输、利用数据库优化器和保持业务逻辑一致性等方面。在电商用户分级、销售报表、动态定价等应用场景中,CASE WHEN能简化复杂查询,特别是与聚合函数、窗口函数结合使用时效果显著。本文通过实际案例解析MySQL中CASE WHEN的基础语法、高级用法和性能优化技巧,帮

weixin_30512965的博客 241

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SQL GROUP BY为何不能用别名?执行顺序与四大解决方案

GROUP BY是SQL聚合操作的核心子句,其行为由ANSI SQL标准严格定义的执行时序决定:FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY。由于GROUP BY在SELECT之前执行,此时SELECT中定义的列别名尚未生成,因此无法被识别——这并非数据库缺陷,而是声明式语言的底层契约。理解该原理可避免常见报错如MySQL的ERROR 1055、SQL Server的Msg 8120及PostgreSQL的'column does not exist'。工程实践中,推

weixin_29230059的博客 129

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

SQL IN操作符实战避坑指南:原理、性能拐点与替代方案

IN操作符是SQL中最常用的基础谓词之一,表面看是多值等值匹配的语法糖,实则涉及查询重写、三值逻辑、索引选择性与执行计划优化等底层机制。其性能并非线性衰减,而存在显著阈值——PostgreSQL在500项后倾向位图扫描,MySQL 2000项即易触发全表扫描,超长列表更可能引发内存溢出或SQL注入风险。结合IN的OR重写本质与NULL静默失效特性,工程实践中需严格控制列表长度(建议≤200)、显式排除NULL、优先采用EXISTS替代子查询,并在大批量场景下转向JOIN或临时表方案。本文聚焦真实数据库(Po

all00747的博客 441

mysql sum 慢_阿里云分析型数据库MySQL版(AnalyticDB)测试初体验

其实是测试半遂体验。这阵子对OLAP数据库产生了兴趣,先是简单测试了ClickHouse,性能的确不错,不过它在稳定&可靠性,整体生态&周边配套方面还有待加强,我会持续保持关注。3月27日,腾讯云推送的文章 TXSQL(TencentDB for MySQL) 8.0特性介绍 中提到即将推出 基于MySQL框架的列存引擎CSTORE,看了下架构图,和以前红极一时的 inf...

weixin_39830387的博客 242

PostgreSQL与MySQL企业级数据库选型实战指南

关系型数据库选型本质是工程匹配问题,而非功能优劣比较。MySQL以高并发OLTP、成熟主从复制和丰富生态见长,适合电商交易、用户注册等强一致性、短事务场景;PostgreSQL凭借MVCC并发机制、JSONB原生索引、高级查询优化器及逻辑复制能力,在复杂分析、GIS处理、实时风控等混合负载中展现显著优势。其技术价值在于支撑数据零丢失、变更零失误、演进零阻力的‘三零’可靠性目标,广泛应用于金融核心系统、IoT平台与SaaS多租户架构。本文基于真实生产案例,聚焦负载特征、数据模型与团队能力三维决策模型,提供可落

weixin_34167819的博客 411

多维聚合实战:从SQL GROUP BY到OLAP立方体的工程化跃迁

多维聚合是现代数据分析的核心能力,本质是基于维度建模对高基数字段进行可组合、可钻取、可复现的分组聚合操作。它突破传统SQL中GROUP BY的单向降维局限,依托OLAP立方体思维,通过维度表与事实表分离、层级结构定义和度量聚合规则,支撑交叉分析、切片切块、钻取上卷等交互式探索。技术价值在于提升分析灵活性、保障指标一致性、降低BI响应延迟;广泛应用于销售归因、用户行为路径分析、财务多维成本分摊等场景。本文聚焦多维聚合在真实数据规模下的工程落地,覆盖维度建模、SQL优化、Pandas适配及常见陷阱排查。

anjichan4261的博客 339

在MySQL中实现Oracle的to_char与to_date自定义函数

在数据库迁移与异构系统对接中,日期格式化函数的兼容性往往成为开发痛点。Oracle 与 MySQL 的日期格式体系截然不同,例如 to_char、to_date 等原生函数在 MySQL 中并不存在,直接迁移会报错。针对这一场景,业界常见做法是在 MySQL 中构建自定义函数,并通过格式映射器完成 Oracle 格式符到 MySQL 格式符的转换,从而实现应用层 SQL 零改动。这种方案不仅适用于 Oracle 向 MySQL 的平滑迁移,也能显著降低报表改造与数据同步的成本。文章围绕映射器的设计、to_c

weixin_34396103的博客 282
上一篇: 高性能MySQL(3th)(第六章 sql优化) —— 05 查询当前C/S连接(线程)所处的状态
下一篇: ON、WHERE、USING和HAVING的区别
ProLayman
博客等级 码龄10年 105粉丝 192原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值