SQL 复杂查询和性能优化
一、掌握复杂查询的核心技能
1. 理解 SQL 执行顺序
- SQL 语句的逻辑执行顺序(非书写顺序):
FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT
- 关键点:每一步的结果会传递给下一步,影响优化逻辑。
2. 多表连接(JOIN)
- 类型:
INNER JOIN
(默认)LEFT/RIGHT JOIN
FULL OUTER JOIN
(部分数据库不支持)CROSS JOIN
(笛卡尔积)
- 示例:
SELECT u.name, o.order_id FROM users u LEFT JOIN orders o ON u.id = o.user_id WHERE o.amount > 100;
3. 子查询与 CTE
- 子查询:
SELECT name FROM users WHERE id IN (SELECT user_id FROM orders WHERE amount > 100);
- CTE(公共表表达式):
WITH high_value_orders AS (SELECT user_id FROM orders WHERE amount > 100 ) SELECT u.name FROM users u JOIN high_value_orders hvo ON u.id = hvo.user_id;
- 优势:CTE 可读性更好,支持递归查询。
4. 窗口函数
- 用途:在结果集的子集上计算聚合(不折叠行)。
- 示例:
SELECT name, salary,RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank FROM employees;
- 常用函数:
ROW_NUMBER()
,RANK()
,DENSE_RANK()
LEAD()
,LAG()
SUM() OVER (PARTITION BY ...)
5. 复杂条件与 CASE 语句
- 动态分类:
SELECT name,CASE WHEN salary > 10000 THEN 'High'WHEN salary > 5000 THEN 'Medium'ELSE 'Low' END AS salary_level FROM employees;
二、性能优化核心技巧
1. 分析执行计划
- 使用
EXPLAIN
:EXPLAIN SELECT * FROM users WHERE email = 'user@example.com';
- 关键指标:
Full Table Scan
(全表扫描)→ 需要避免。Index Scan
(索引扫描)→ 理想情况。Rows Removed by Filter
→ 过滤效率。
2. 索引优化
- 何时使用索引:
- 频繁作为查询条件的列(WHERE、JOIN、ORDER BY)。
- 高选择性的列(唯一值多,如用户ID)。
- 索引类型:
- 单列索引、复合索引、唯一索引、覆盖索引。
- 复合索引设计:
- 将最常用的列放在前面。
- 示例:
INDEX (country, city)
可优化WHERE country='US' AND city='NY'
。
3. 避免全表扫描
- 反例:
SELECT * FROM users WHERE YEAR(created_at) = 2023; -- 无法使用 created_at 的索引
- 优化:
SELECT * FROM users WHERE created_at BETWEEN '2023-01-01' AND '2023-12-31';
4. 分页优化
- 低效写法:
SELECT * FROM users LIMIT 1000000, 10; -- 扫描前 100 万行
- 优化:
SELECT * FROM users WHERE id > 1000000 ORDER BY id LIMIT 10;
5. 减少数据传输量
- 避免
SELECT *
:SELECT id, name FROM users; -- 只取必要字段
- 分批次处理:
-- 使用 WHERE 条件分块处理大表 DELETE FROM logs WHERE created_at < '2020-01-01' LIMIT 1000;
6. 利用分区表
- 按时间分区:
-- 按月份分区(具体语法因数据库而异) CREATE TABLE logs (id INT,log_time DATETIME,message TEXT ) PARTITION BY RANGE (YEAR(log_time), MONTH(log_time));
- 优势:快速定位分区,减少扫描范围。
三、高级优化场景
1. JOIN 优化
- 小表驱动大表:
-- 假设 users 是小表,orders 是大表 SELECT * FROM users u JOIN orders o ON u.id = o.user_id;
- 使用
STRAIGHT_JOIN
(MySQL):强制指定 JOIN 顺序。
2. 临时表与物化视图
- 临时表:
CREATE TEMPORARY TABLE temp_high_salary AS SELECT * FROM employees WHERE salary > 10000;
- 物化视图:预计算复杂查询结果(如 PostgreSQL 的
MATERIALIZED VIEW
)。
3. 统计信息更新
- 手动更新(适用于数据变化大的表):
ANALYZE TABLE users; -- MySQL VACUUM ANALYZE users; -- PostgreSQL
4. 避免锁竞争
- 使用乐观锁:
UPDATE products SET stock = stock - 1 WHERE id = 100 AND stock > 0;
- 分拆事务:将大事务拆分为小操作。
四、工具与调试
- 数据库管理工具:
- MySQL:
EXPLAIN FORMAT=JSON
、SHOW PROFILE
- PostgreSQL:
EXPLAIN ANALYZE
、pg_stat_statements
- MySQL:
- 监控工具:
- Prometheus + Grafana(监控慢查询、锁等待)。
- 基准测试:
- 使用
sysbench
或自定义脚本模拟负载。
- 使用
五、常见误区
- 过度索引:索引会降低写入速度,需权衡。
- 忽略 NULL 值:
WHERE column = NULL
应改为WHERE column IS NULL
。 - 滥用子查询:优先使用 JOIN 或 CTE。
- 不更新统计信息:导致优化器选择错误执行计划。
相关文章:
SQL 复杂查询和性能优化
一、掌握复杂查询的核心技能 1. 理解 SQL 执行顺序 SQL 语句的逻辑执行顺序(非书写顺序): FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT 关键点:每一步的结果会传递给下一步&a…...
【web应用安全】关于web应用安全的几个主要问题的思考
文章目录 防重放攻击1. **Token机制(一次性令牌)**2. **时间戳 超时验证**3. **Nonce(一次性随机数)**4. **请求签名(如HMAC)**5. **HTTPS 安全Cookie**6. **幂等性设计****综合防御策略建议****注意事项…...
看懂roslunch输出
自编了一个demo 第一步:创建功能包 cd ~/catkin_ws/src catkin_create_pkg param_demo roscpp第二步:写 main.cpp 创建文件:param_demo/src/param_node.cpp #include <ros/ros.h> #include <string>int main(int argc, char*…...
如何查看Unity打包生成的ab文件
文章目录 前言AssetStudioab文件介绍1. 动态加载资源2. 资源分离与模块化3. 平台兼容性4. 资源压缩与加密5. 资源管理与更新6. 减少安装包大小7. 资源加载灵活性8. 资源打包与分发9. 实际应用场景10. 注意事项 总结 前言 问题来源于工作又回归到工作,当发现发布包里…...
从泛读到精读:合合信息文档解析如何让大模型更懂复杂文档
从泛读到精读:合合信息文档解析如何让大模型更懂复杂文档 一、引言:破解文档“理解力”瓶颈二、核心功能:合合信息的“破局”亮点功能亮点1:复杂图表的高精度解析图表解析:为大模型装上精准“标尺”表格数据精准还原 功…...
Python SciPy面试题及参考答案
目录 什么是 SciPy?它与 NumPy 有什么区别? 如何在 Python 中安装 SciPy? 如何导入 SciPy 库? SciPy 中有哪些子模块?简要介绍它们的功能。 如何使用 SciPy 进行数值积分?请举例说明。 SciPy 中提供了哪些求解微分方程的函数? 什么是插值?SciPy 中如何进行插值?…...
21.Excel自动化:如何使用 xlwings 进行编程
一 将Excel用作数据查看器 使用 xlwings 中的 view 函数。 1.导包 import datetime as dt import xlwings as xw import pandas as pd import numpy as np 2.view 函数 创建一个基于伪随机数的DataFrame,它有足够多的行,使得只有首尾几行会被显示。 df …...
【redis】数据类型之Stream
Redis Stream是Redis 5.0版本引入的一种新的数据类型,它提供了一种持久化的、可查询的、可扩展的消息队列服务。 它结合了Redis高性能的特性与持久化能力,支持: 多消费者组模式(Consumer Groups)消息回溯(…...
day17 周末两天偷懒没更新,今天炼丹加学习,完结STL常用容器部分
还剩下两个常用容器,一个是set(集合容器) , 一个是map容器 set/multiset 容器 set容器是关联式容器,该容器的特点是:所有元素都会在插入时被自动排序 set/multiset 都是关联式容器 ,其底层结构是使用二叉树实现的。…...
嵌入式开发场景中Shell脚本执行方式的对比
Shell脚本执行方式对比表 执行方式命令示例是否需要执行权限是否启动子Shell环境变量影响范围适用场景嵌入式开发中的典型应用直接执行脚本./script.sh是是子Shell内有效独立运行的脚本,需固定环境自动化构建脚本(…...
数据结构之多项式相加的链表实现
在计算机科学中,多项式的表示和运算经常会用到。使用链表来表示多项式是一种常见且有效的方法,它可以方便地处理多项式的各项,并且在进行多项式相加等运算时具有较好的灵活性。 多项式通常由一系列的项组成,每一项包含一个系数和…...
Java 实现将Word 转换成markdown
日常的开发中,需要将word 等各类文章信息转换成格式化语言,因此需要使用各类语言将word 转换成Markdown 1、引入 jar包 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version&g…...
IEEE PDF Xpress校验出现 :字体无法嵌入问题以及pdf版本问题
文章目录 问题描述一、字体嵌入问题首先查看一下,哪些字体没有被嵌入查看window的font文件夹里的字体下载字体的网站修复字体嵌入问题 二、pdf版本不对 问题描述 在处理IEEE的camera ready的时候,提交到IEEE express的文件没有办法通过validate…...
Sa-Token
简介 Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。 官方文档 常见功能 登录认证 本框架 用户提交 name password 参数,调用登…...
StarRocks 中 CURRENT_TIMESTAMP 和 CURRENT_TIME 分区过滤问题
背景 本文基于Starrocks 3.3.5 最近在进行Starrocks 跑数据的时候,发现了一个SQL 扫描了所有分区的数据,简化后的SQL如下: select date_created from tableA where date_createddate_format(current_time(), %Y-%m-%d %H:%i:%S) limit 20其…...
GithubPages+自定义域名+Cloudfare加速+浏览器收录(2025最新排坑)
前言 最近刷到一个小视频,讲述了选择域名选择的三宗罪,分别是 不要使用 .net,因为它价格贵,但是在顶级域名中的 SEO 效果却不是很好,也就是性价比很低不要使用 .cn,因为国外访问该网站可能会很慢…...
Canvas粒子系统终极指南:从基础运动到复杂交互的全流程实现
文章目录 一、粒子系统基础架构1.1 粒子数据结构设计1.2 粒子系统管理器 二、基础粒子效果实现2.1 重力场模拟2.2 弹性碰撞效果 三、高级交互实现3.1 鼠标吸引效果3.2 颜色渐变粒子 四、性能优化策略4.1 粒子池复用4.2 分层渲染 五、复杂效果实现5.1 烟花爆炸效果5.2 流体模拟 …...
【QT】新建QT工程(详细步骤)
新建QT工程 1.方法(1)点击new project按钮,弹出对话框,新建即可,步骤如下:(2) 点击文件菜单,选择新建文件或者工程,后续步骤如上 2.QT工程文件介绍(1).pro文件 --》QT工程配置文件(2)main.cpp --》QT工程主…...
详解Http:在QT中使用Http协议
目录 一、HTTP 概述 1、主要特点 2、HTTP 方法 3、HTTP 状态码 4、HTTP 头部 5、HTTP的工作原理 二、在Qt中使用HTTP 1、发送简单的HTTP请求 2、发送POST请求 3、处理异步请求 4、使用QSslConfiguration进行HTTPS 5、 处理JSON响应 6、处理错误 三、总结 一、HTTP…...
Next.js 中间件鉴权绕过漏洞 (CVE-2025-29927) 复现利用与原理分析
免责声明 本文所述漏洞复现方法仅供安全研究及授权测试使用; 任何个人/组织须在合法合规前提下实施,严禁用于非法目的; 作者不对任何滥用行为及后果负责,如发现新漏洞请及时联系厂商并遵循漏洞披露规则。 漏洞原理 Next.js 是一个…...
AI时代的数据底座:火山引擎多模态数据湖的设计与实践
资料来源:火山引擎-开发者社区 随着大模型的发展和应用,文本的边界被拓宽,图像、视频、语音各种模态涌现,并给数据管理、检索、计算带来巨大挑战。 火山引擎多模态数据湖 解决方案则可实现海量结构化、半结构化及非结构化数据的统…...
Numpy用法(二)
一.数组变维 1.1 reshape reshape() 可以改变数组维度,但是返回的是一个新的数组,原数组的形状不会被修改.reshape后产生的新数组是原数组的一个视图,即它与原数组共享相同的数据,但可以有不同的形状或维度,且对视图…...
STM32 IIC通信
目录 IIC简介硬件电路连接I2C时序基本单元IIC完整数据帧MPU6050封装硬件IIC内部电路 IIC简介 IIC(Inter-Integrated Circuit)是 IIC Bus 简称,中文叫集成电路总线。它是一种串行通信总线,使用多主从架构,由飞利浦公司…...
快速入门 JSON 数据格式
引言 JSON,全称 JavaScript Object Notion,类似于XML,YAML,Properties等,是一种数据交换格式,相比于XML,更简单,更轻量,更容易理解。 JSON vs XML 使用 JSON 目前被广…...
FFmpeg —— 中标麒麟系统下使用FFmpeg内核+Qt界面,制作完整功能音视频播放器(附:源码)
🔔 FFmpeg 相关音视频技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) 程序运行效果...
硬件测试工装设计不合理的补救措施
硬件测试工装设计不合理的补救措施主要包括重新评估设计需求、优化工装结构、强化工装校准与验证。其中,优化工装结构尤其重要,通过结构优化能够有效解决因设计不合理导致的测试准确性下降和可靠性不足的问题。根据工程实践数据,经过优化结构…...
任意文件读取漏洞
fofa语句:body"/vite/client" /fs/etc/passwd?import&raw?? https://35.175.173.157/fs/etc/passwd?import&raw?? http://geometer.dev.mvergely.com/fs/etc/passwd?import&raw??...
如何使用RK平台的spi驱动 spidev
RK平台spidev驱动读取RC522版本号示例 1. 硬件与驱动确认 确认SPI接口连接:RC522的SPI引脚与RK开发板的对应SPI控制器正确连接(CS、CLK、MOSI、MISO)检查内核配置: Bash # 内核需启用以下配置 CONFIG_SPIy CONFIG_SPI_MASTERy…...
网路传输层UDP/TCP
一、端口号 1.端口号 1.1 五元组 端口号(port)标识了一个主机上进行通信的不同的应用程序. 如图所示, 在一个机器上运行着许多进程, 每个进程使用的应用层协议都不一样, 比如FTP, SSH, SMTP, HTTP等. 当主机接收到一个报文中, 网络层一定封装了一个目的ip标识我这台主机, …...
1.2-WAF\CDN\OSS\反向代理\负载均衡
WAF:就是网站应用防火墙,有硬件类、软件类、云WAF; 还有网站内置的WAF,内置的WAF就是直接嵌在代码中的安全防护代码 硬件类:Imperva、天清WAG 软件:安全狗、D盾、云锁 云:阿里云盾、腾讯云WA…...
Dify 服务器部署指南
1. 系统要求 在开始部署之前,请确保你的服务器满足以下要求: 操作系统:Linux(推荐使用 Ubuntu 20.04 或更高版本)内存:至少 4GB RAM存储:至少 20GB 可用空间网络:稳定的互联网连接…...
从车间到数字生态:MES如何引领制造业智能化革命
在全球制造业加速迈向工业4.0的浪潮中,传统生产模式正经历颠覆性变革。制造执行系统(MES)作为连接物理车间与数字世界的核心纽带,正从“生产辅助工具”升级为“智能决策大脑”,推动制造业向数据驱动、柔性化与可持续化…...
Error:Flash Download failed
出现这个就是编译器要换...
Spring容器生命周期详解
Spring容器生命周期详解 Spring容器的生命周期从启动到关闭分为多个阶段,包括Bean的加载、实例化、初始化、使用和销毁。以下是详细流程和关键点: 1. 容器启动阶段 1.1 容器实例化 核心接口:BeanFactory(基础容器)或…...
革新测试管理 2.0丨Storm UTP统一测试管理平台智能化升级与全流程优化
承接上篇:从基础架构到深度协同 在首篇文章《革新测试管理 | 统一测试管理平台如何实现远程、协同、自动化?》中,我们探讨了Storm UTP如何通过云端协作、自动化测试框架和分布式执行能力打破传统测试壁垒。经过一年多的客户实践与技术迭代&a…...
将 char [] str = “hello,you,world” 改为 “world,you,hello“,要求空间复杂度为1
题目: 将 char [] str “hello,you,world” 改为 "world,you,hello",要求空间复杂度为1 (也就是使用的变量只能是单个字符或者常数,不能使用数组!!!!!) 解…...
运维规则之总结(Summary of Operation and Maintenance Rules)
运维规则之总结 在运维领域,经验和流程往往决定了系统的稳定性与可靠性。一个运维人,总结出了以下10条运维规则,涵盖了从基础管理到高级策略的全面内容,旨在帮助运维人员更好地应对各种挑战,确保系统的平稳运行。 1.…...
MongoDB 创建数据库
MongoDB 创建数据库 引言 MongoDB 是一款高性能、可扩展的 NoSQL 数据库,广泛应用于大数据领域。在 MongoDB 中,创建数据库是进行数据存储的第一步。本文将详细介绍 MongoDB 数据库的创建方法,包括手动创建和自动创建两种方式。 MongoDB 数…...
SpringSecurity OAuth2:授权服务器与资源服务器配置
文章目录 引言一、OAuth2基础概念与架构二、授权服务器配置三、令牌策略与存储方式四、资源服务器配置五、远程令牌验证与内省总结 引言 在现代分布式应用架构中,OAuth2已成为实现安全授权与认证的事实标准。Spring Security对OAuth2提供了全面支持,使开…...
Vue 2 探秘:visible 和 append-to-body 是谁的小秘密?
🚀 Vue 2 探秘:visible 和 append-to-body 是谁的小秘密?🤔 父组件:identify-list.vue子组件:fake-clue-list.vue 嘿,各位前端探险家!👋 今天我们要在 Vue 2 的代码丛林…...
C#高级:启动、中止一个指定路径的exe程序
一、启动一个exe class Program {static void Main(string[] args){string exePath "D:\测试\Test.exe";// 修改为你要运行的exe路径StartProcess(exePath);}private static bool StartProcess(string exePath){// 创建一个 ProcessStartInfo 对象来配置进程启动参…...
windows下安装sublime
sublime4 alpha 4098 版本 下载 可以根据待破解的版本选择下载 https://www.sublimetext.com/dev crack alpha4098 的licence 在----- BEGIN LICENSE ----- TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA12C0 A37081C5 D0316412 4584D…...
Qt 日志输出(重定向)
在软件开发中,日志输出是调试和问题排查的关键手段。Qt框架提供了灵活的日志系统,支持从简单的控制台输出到复杂的自定义日志处理。本文将详细介绍Qt中五种常用的日志输出方法,并附上完整代码示例。 一、使用Qt内置日志函数 Qt提供了五个全局…...
51c嵌入式~MOS~合集1
我自己的原文哦~ https://blog.51cto.com/whaosoft/12074888 一、MOS管:米勒效应、开关损耗以及参数匹配 MOS管即场效应管(MOSFET),属于压控型,是一种应用非常广泛的功率型开关元件,在开关电源、逆变器…...
一文详解k8s体系架构知识
0.云原生 1.k8s概念 1. k8s集群的两种管理角色 Master:集群控制节点,负责具体命令的执行过程。master节点通常会占用一股独立的服务器(高可用部署建议用3台服务器),是整个集群的首脑。 Master节点一组关键进程…...
Linux内核软中断分析
一、软中断类型 在Linux内核中,中断处理分为上半部(硬中断)和下半部。上半部负责快速响应硬件事件,而下半部用于处理耗时任务,避免阻塞系统。下半部有三种机制:软中断(Softirq)、小任…...
从医疗大模型到综合医疗智能体:算法、架构与路径全流程分析
一、引言 1.1 研究背景与意义 随着信息技术的飞速发展,医疗领域正经历着深刻的变革。医疗智能体作为人工智能技术在医疗行业的重要应用,正逐渐成为提升医疗服务质量、优化医疗流程、促进医疗资源合理分配的关键力量。从最初简单的医疗信息管理系统,到如今能够辅助诊断、制定…...
2025跳槽学习计划
(1)编程基础: 目录学习资料Chttps://www.bilibili.com/video/BV1z64y1U7hs?spm_id_from333.1387.favlist.content.clickLinuxPytorchhttps://www.bilibili.com/video/BV1if4y147hS?spm_id_from333.1387.favlist.content.clickopencv数据结…...
数据库后续
-- 添加作者字段 alter table t_hero add author varchar(100); -- 更新数据 update t_hero set author "曹雪芹" where id 1; update t_hero set author "曹雪芹" where id 2; update t_hero set author "曹雪芹" where id 3; upd…...
程序员软件工具推荐列表
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 程序员软件工具推荐列表1. Snipaste2. VSCod…...