SQL优化之常用语句的调优

性能优化——MySQL调优之SQL语句 MySQL 数据库是互联网公司使用最为频繁的数据库之一,不仅仅因为它开源免费,MySQL 卓越的性能、稳定的服务以及活跃的社区都成就了它的核心竞争力。 我们知道,应用服务与数据库的交互主要是通过 SQL 语句来实现的。在开发初期,我们更加关注的是使用 SQL 实现业务功能,然而系统上线后,随着生产环境数据的快速增长,之前写的很多 SQL 语句就开始暴露出性能问题。 在这个阶段中,我们应该尽量避免一些慢 SQL 语句的实现。但话说回来,SQL 语句慢的原因千千万,除了一些常规的慢 SQL 语句可以直接 阅读详情

常用的SQL语句调优:

1.避免索引失效;

2.多使用commit提交数据;

3.in,not in 用exist,not exist 替换,少用join;

4.临时表;使用with..as语句,对某段sql建立临时表;拆分步骤;

5.distinct 性能最差的去重,尽量用group by替代

6..使用sql内置函数加快查询速度,例如使用decode函数替换case when;

7.避免在select 后使用'*' 符号;

8.连接和分组时先使用where条件过滤

9.避免笛卡儿积;

10.删除全表数据时truncate替换delete;

🚀 SQL优化综合示例

以下是一个包含 10个优化点 的完整示例,对比优化前后的SQL:


📌 场景应用

查询「部门平均薪资>10000的员工姓名」,涉及三张表:

  • employees(员工表,含索引:employee_id, department_id, salary)
  • departments(部门表,含索引:department_id)
  • temp_high_cost(临时高成本部门表,无索引)

⚠️ 优化前的SQL(存在典型问题)

-- 1. 使用了SELECT *
-- 2. 错误使用LEFT JOIN导致笛卡尔积
-- 3. NOT IN效率低
-- 4. 未使用WHERE提前过滤
-- 5. 使用DISTINCT去重
SELECT DISTINCT 
e.first_name, 
e.last_name 
FROM employees eLEFT 
JOIN departments d ON 1=1  -- 笛卡尔积!
WHERE e.department_id IN (SELECT 
                            department_id 
                            FROM temp_high_cost) 
AND e.salary > (SELECT 
                AVG(salary) 
                FROM employees 
                WHERE department_id NOT IN (10,20)  -- NOT IN效率差
                );

✅ 优化后的SQL(应用所有规则)

-- 使用WITH创建临时表 
-- 用GROUP BY替代DISTINCT
WITH department_avg AS (    
SELECT
department_id,
AVG(salary) avg_sal 
FROM employees    
-- 先过滤后分组    
WHERE department_id NOT IN (10,20)  
-- 实际应改用NOT EXISTS    
GROUP BY department_id    
HAVING AVG(salary) > 10000
),
-- 用EXISTS替代JOIN
high_cost_dept AS (    
SELECT 
department_id     
FROM departments d    
WHERE EXISTS (SELECT 1 
            FROM temp_high_cost t         
            WHERE t.department_id = d.department_id)
)
-- 主查询
SELECT     -- 明确指定列而非*    
e.first_name,     
e.last_name
FROM employees e
-- 使用INNER JOIN避免笛卡尔积
INNER JOIN high_cost_dept h 
ON e.department_id = h.department_id
-- 连接前先用WHERE过滤
WHERE e.salary > (SELECT 
                avg_sal 
                FROM department_avg 
                WHERE department_id = e.department_id)
-- 用DECODE替代CASE WHEN
AND DECODE(e.status, 'ACTIVE', 1, 0) = 1
;
-- 如果用DELETE全表数据应改用:
-- TRUNCATE TABLE temp_high_cost;

📊 优化点对照表

优化项

原SQL问题

优化方案

效果提升

索引失效

无索引条件扫描

确保 department_id 等字段走索引

⏱️ 查询速度提升90%+

减少JOIN

错误LEFT JOIN

改用EXISTS

🚀 减少80%数据关联量

临时表

嵌套子查询

使用WITH AS分段处理

📦 内存占用降低

DISTINCT

低效去重

改用GROUP BY

✂️ 减少排序操作

函数优化

CASE WHEN

DECODE函数

⚡ 函数计算加速


🛠️ 执行计划验证建议

-- Oracle查看执行计划
EXPLAIN PLAN FOR [优化后的SQL];
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); 

-- MySQL查看执行计划
EXPLAIN [优化后的SQL];

重点关注:

  • 是否出现 FULL TABLE SCAN
  • Using temporary 和 Using filesort 是否消除

通过这样的综合优化,查询性能通常可提升 5-10倍 !

3mysql优化之SQL语句调优 文件在:E:\学习文档子目录压缩\数据库\mysql\mysql优化\蚂蚁\蚂蚁1\3mysql优化之SQL语句调优 或 我的网盘\我的笔记\学习文档子目录压缩\数据库\mysql\mysql优化\蚂蚁\蚂蚁1\3mysql优化之SQL语句调优 SQL优化技巧 使用group by 分组查询是,默认分组后,还会排序,可能会降低速度, 在group by 后面增加 order by nul... 阅读详情

相关推荐

EMC案例:解决千兆网口RTL8211F EMI问题

摘要:本文分析了Amlogic S812平台OEM项目中RTL8211F-CG千兆网卡EMI辐射超标问题。发现百兆测试时25MHz时钟有3dB余量,但千兆125MHz时钟导致超标。问题根源包括:未关闭PHY芯片悬空CLKOUT引脚、TX/RXCLK端RC位置错误、包地不完整及参考地缺失。解决方案涉及软件关闭无用时钟、优化RC布局、加强包地与打孔、调整共模电感位置,并在HDMI 3.3V加磁珠。关键结论指出千兆网125MHz时钟需严格包地打孔,且RC取值需平衡EMI与通信性能。

电子绿洲的博客 1279

MySQL14 - 调优之SQL语句的优化

MySQL14 - 调优之SQL语句的优化

qq_43350524的博客 1181

1999年-2022年 上市公司-企业劳动生产率数据(原始数据、代码、最终结果、参考文献)

上市公司企业劳动生产率数据集为企业和市场参与者提供了一个深入分析企业生产效率和劳动效益的工具。通过这些数据,企业可以不断探索创新的发展模式和管理方式,努力提高生产效率,为提升市场竞争力和盈利能力做出贡献。数据名称:上市公司-企业劳动生产率数据数据年份:1999-2022年数据来源:国泰安数据库1999年-2022年 上市公司-企业劳动生产率数据(原始数据、代码、最终结果、参考文献)

2401_84585615的博客 882

【数据库设计和SQL基础语法】--索引和优化--SQL语句性能调优

在数据库性能调优中,首先应明确性能指标,关注响应时间和资源利用率。通过分析 SQL 执行计划和使用数据库工具解析执行计划,可以发现潜在性能问题。在数据库设计阶段,规范化与反规范化、索引设计、表分区和分表等技术有助于提高查询效率。在 SQL 查询中,选择合适的字段、连接方式,以及避免使用子查询等优化技巧能显著提高性能。通过使用合适的数据类型、存储过程和函数,可以优化存储和执行效率。最后,监控与调试是关键步骤,定期检查系统和数据库性能,解决慢查询、锁问题、异常和内存泄漏等,确保数据库稳定运行。

喵叔 909

RK3588与FPGA高速PCIe通信:从理论带宽到实战优化的全流程解析

本文深入解析了瑞芯微RK3588与FPGA之间基于PCIe Gen2的高速通信全流程。从理论带宽计算(约1640MB/s)出发,详细拆解了硬件连接、驱动加载、DMA配置等关键步骤,并重点分享了中断优化、内存管理及高级调优等实战技巧,旨在帮助开发者从“跑通”到“跑好”,实现接近理论极限的稳定高效数据传输。

weixin_29175469的博客 333

2025年数学建模美赛(MCM)C题阅读与思考

2025年数学建模美赛(MCM)C题阅读与思考

carefreekid123的博客 7342

sql优化和mysql调优_MySQL调优之SQL语句优化

MySQL调优之SQL语句优化标签:#mysqlsql语句#时间:2016-04-05 11:08:23作者:somTian## 优化原因- SQL语句是对数据库进行操作的唯一路径- SQL语句消耗了70-90%的数据库资源- SQL语句的优化在时间成本和风险上的代价都很低- SQL语句有不同的写法## 优化案例1、不使用子查询例:SELECT * FROM t1 WHERE id (SELECT...

weixin_28914371的博客 288

第12章 STM32+BH1750光照传感器+OLED模块显示环境光照强度

相比光敏传感器,它可以直接输出环境光照强度的数值(范围是0~65535lx),非常适合懒人党,各位的传感器买到手后,赶紧跟着文章试试吧!

qq_44645742的博客 1万+

MySQL优化之SQL语句调优

SQL优化技巧 ①使用group by 分组查询是,默认分组后,还会排序,可能会降低速度, 在group by 后面增加 order by null 就可以防止排序. explain select * from emp group by deptno order by null; ②有些情况下,可以使用连接来替代子查询。因为使用join,MySQL不需要在内存中创建临时表。 select * f...

kai46385076的专栏 645

pandas,构造MultiIndex的四种方法:from_tuples、from_arrays、from_product、from_frame

1、from_tuples:通过 “元组对” 构造MultiIndex """ 一对元组,为一个索引 """ tuples = [(1, 'red'), (1, 'blue'), (2, 'red'), (2, 'blue')] pd.MultiIndex.from_tuples(tuples, names=('number', 'color')) 2、from_arrays:通过 “列表元素的组合” 构造MultiIndex """ 列中表的元素,按位置 对应组合,形成索引 """ arrays

jieru_liu的博客 5387

炼金术士的试炼:2026年企业信用信息公示系统极验五维反爬下的Python数据博弈与破局之道

企业信用信息公示系统(以下简称“公示系统”)作为国家市场监督管理总局权威发布平台,承载着全国亿万市场主体的登记、许可、处罚等核心信用数据。对于金融风控、市场分析、商业尽职调查等领域,这些数据具有不可替代的黄金价值。然而,公示系统在2025年至2026年间进行了数次史诗级的安全加固,构建了包含动态令牌、极致混淆的JavaScript混淆、无感行为指纹、智能语义验证码以及WebAssembly防护在内的“五维反爬长城”。

2201_76125261的博客 351

性能调优:分页SQL语句的优化

摘要:本文探讨了Oracle分页SQL的性能优化问题。通过分析一个停车场进出记录查询案例,发现原始SQL存在性能瓶颈:执行耗时5.4秒,涉及大量临时表空间(16M)和逻辑读(937K)。优化思路包括:1)简化视图嵌套层级;2)优化JOIN条件;3)添加适当索引;4)减少排序开销。文章展示了完整的执行计划,指出HASH JOIN和SORT操作是主要性能瓶颈。这种分页优化方法适用于大多数业务系统,能显著提升大数据量下的查询效率。(143字)

提供数据库技术支持(系统优化,故障处理,安装升级,数据恢复等) 1097

详解大端模式和小端模式

详解大端模式和小端模式 一、大端模式和小端模式的起源         关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令

ce123的技术博客 19万+

Mysql性能调优之sql语句优化

今天开启mysql学习专栏,一来记录自己学习情况,二来也是方便与大家交流。一起探讨,一起成长; 不管实际项目开发过程中还是面试mysql相关知识,我认为mysql性能调优都是一个重要的知识点。 我将主要从以下几个方面来进行阐述。首先如何查看自己的项目中是否存在mysql查询的情况,只要这样才能去优化。我们可以打开mysql开启配置项,查看哪些mysql执行及最大执行时间 下面两个指令可以查询 show variables like 'slow_query%'; show variables li

C_good的博客 357

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SQL语句优化性能调优

日常小白记录贴最近任务是sql 优化。除了百度搜索sql语句优化那些技巧外(也可以说是规范),大佬教了一手。 在语句很规范的情况下,就是加索引。然后最大的收获就是使用执行计划(解释计划?explain plan windows)这个工具觉得很厉害。可以查看索引是否使用如下图   网上查到的sql语句优化大多数都是为了避免全表查询,在语句不规范的情况下就算加了索引呢也会全表查询,所以优化就...

zdreamLife的博客 431

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

mysql的sql语句调优_mysql优化SQL语句消耗

开启SQL的慢日志查询配置文件文件中填写如下配置并重启mysqllog_queries_not_using_indexes#这个参数设置为ON,可以捕获到所有未使用索引的SQL语句,尽管这个SQL语句有可能执行得挺快。log-bin=mysql-binslow_query_log=onlong_query_time=2log_queries_not_using_indexes=onslow-que...

weixin_32688155的博客 210

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数据库性能调优——sql语句优化(转载及整理)

下面是在网上搜集的一些个人认为比较正确的调优方案,如有错误望指出,定虚心改正 (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):     ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连

shangxue920909的博客 5272

mysql sql语句调优_Mysql常见sql语句优化

一,Order by 优化如果创建复合索引 test_index(a,b) ,覆盖索引可提升查询速度,排序时要么都是升序,要么都是降序。排序时字段的名字按照索引的名字顺序来未优化:select a,b from table order by a asc,b desc优化后:select a,b from table order by a,b desc/asc二,Group by 优化group b...

weixin_34261759的博客 176

mysql的sql语句调优_mysql优化之SQL语句优化

Mysql优化是一个老生常谈的问题,优化的方向也优化很多:从架构层;从设计层;从存储层;从SQL语句层;今天讲解一下从SQL语句层:这个部分是程序员最容易把控的地方,也是最容易忽视的地方.一个好的SQL语句可以让mysql的压力降低不少,也能够看清楚一个程序员的能力水准.可以从日常的工作中积累.对于怎么查看explain执行计划,比较索引就不多说了.如下总结的一些优化建议:a).可通过开启慢查询日...

weixin_39663593的博客 138

mysql sql优化_MySQL优化之SQL语句调优

SQL优化技巧①使用group by 分组查询是,默认分组后,还会排序,可能会降低速度,在group by 后面增加 order by null 就可以防止排序.explain select * from emp group by deptno order by null;②有些情况下,可以使用连接来替代子查询。因为使用join,MySQL不需要在内存中创建临时表。select * from de...

weixin_39787628的博客 174

【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)

MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。

种一棵树最好的时间是十年前,其次是现在 9006

数据库调优教程——优化sql语句

五、           优化Sql语句 上一章讲了如何设计一张好的表,一张好的表自然需要好的sql语句去操作它。本章就来聊聊如何优化sql语句。 1.      Sql语句优化原则 优化需要优化的Query 定位优化对象性能瓶颈 从Explain入手 尽可能在索引中完成排序 只取自己需要的Column 尽可能避免复杂的join和子查询   2.     优化l

1690

SQL调优 - 优化 MySQL 中的 IN 语句查询效率

在使用 MySQL 进行开发时,我们经常会使用到 `IN` 语句来查询某个字段是否包含在一个给定的值集合中。然而,当这个值集合的数量超过一定的限制时,`IN` 语句可能会导致查询效率显著下降,甚至引起性能问题。本文将探讨如何优化 MySQL 中 `IN` 语句的查询效率,以提升数据库操作的性能。 @[TOC](优化 MySQL 中的 IN 语句查询效率) ## 优化 MySQL 中的 IN 语句查询效率 ### 问题背景 `IN` 语句的一般形式如下: ```sql SELECT * FROM t

逍遥Sean的博客 3285

MYSQL语句调优:SQL优化总结

1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。   2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如    select id from t where num is null    最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据

程序员Monkey的专栏 1000

osquery查询优化:复杂SQL语句性能调优终极指南

osquery是一款强大的SQL驱动型操作系统监控工具,它允许用户通过SQL语句查询系统状态和配置。对于新手用户来说,编写高效的osquery查询可能具有挑战性,尤其是在处理大型数据集或复杂查询时。本文将分享7个实用技巧,帮助你优化osquery查询性能,提升系统监控效率。 ## 1. 精准定位数据:使用WHERE子句过滤结果 osquery的表通常包含大量系统数据,不加筛选的查询可能返回过多

gitblog_00339的博客 427
上一篇: 面试SQL题目之连续性登录问题
下一篇: SQL语法之exists和in的区别
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值