Before After:SQL整容级优化

首先说明这个优化有一定提升,但不是我所期望的

我接到一个涉及优化的SQL,具体内容实在太长。而且可能也不利于阅读。于是我脱敏以及简化一下。SQL中间大量的充斥着
(select 列名1
from t1
where t1.id = t2.id
) A,
(select 列名2
from t1
where t1.id = t2.id
) B,
(select 列名3
from t1
where t1.id = t2.id
) C,

这样的的形式,如果配合实际的列,实际的表。那就太长了。洋洋洒洒数百行。

SQL最后是用到索引的,所以本次不是给索引方向的优化。

就上面的SQL而言,我和对方说,你这个就是t1和t2关联,每一个字段都去关联循环一次,这样平白无故多做了很多次。其实把他放在一行一次性可以完成。这种时候一定要举例。

拿一个样品 A和B两个表

image.png

模拟原始写法是这样的

image.png

那么我给的改写建议是这样的

image.png

从这两个来说结果一致的,可以说基本是等效的。

那么看原始的执行效果

image.png

一共有三步access执行,最终发生了31次逻辑读。

而改写的执行效果

image.png

一共有两步access执行,最终发生了14次逻辑读。
毕竟我少一层括号。 而真实的SQL如果改写了,那么就不是一层,那是几十层了。

这背后的原因我是多少能猜出一点的

这些年站在开发角度看问题就习惯了。
就是需求提一个字段,加一个字段,那么就来一个括号。N表的联合,每次多一个也不方便动之前的,就加吧。流水线作业,铁打的代码流水的开发。今天做完这个,明天还不一定做什么呢?
还有不少企业是外包做,那么就是雇佣兵,明天还在不在这里还一说呢。只管完成眼前任务。
当进度和质量冲突时候,保证进度。进度是影响收入的,质量不是。

最终一定是有优化作用

毕竟少了几十个循环,一定是快了。而且SQL的篇幅是大幅降低。
当然还有一些其他方面的建议没有达成一致。其实很多时候去管管不着调的需求,能有更好的收益。

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

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

相关文章

道可云人工智能每日资讯|首届世界人工智能电影节在法国尼斯举行

道可云元宇宙每日简报(2025年4月15日)讯,今日元宇宙新鲜事有: 杭州《西湖区打造元宇宙产业高地的扶持意见》发布 杭州西湖区人民政府印发《西湖区打造元宇宙产业高地的扶持意见》。该意见已于4月4日正式施行,有效期至…

JVM 为什么需要即时编译器?

JVM之所以需要即时编译器 (JIT Compiler),是为了提高 Java 程序的执行性能,弥补纯解释器执行的不足。 我们可以从以下几个角度来分析一下这个问题: 1. 解释器的性能瓶颈: 逐条解释的开销: 解释器需要逐条读取 Java 字节码指令,并…

PromptUp 网站介绍:AI助力,轻松创作

1. 网站定位与核心功能 promptup.net 可能是一个面向 创作者、设计师、营销人员及艺术爱好者 的AI辅助创作平台,主打 零门槛、智能化的内容生成与优化。其核心功能可能包括: AI艺术创作:通过输入关键词、选择主题或拖放模板,快速生成风格多样的数字艺术作品(如插画、海报…

ThingsBoard3.9.1 MQTT Topic(1)

1.网关转发子设备的遥测信息, Topic:v1/gateway/telemetry { "m1": [{ "mode": "CW", "temperature": 23 }], "m2": [{ "mode": "CW", "temperature": 23 }] } 说明:json格式&a…

React 入门教程:构建第一个 React 应用

本教程将带你从零开始构建你的第一个 React 应用。我们将创建一个简单的计数器应用,涵盖 React 的基本概念和开发流程。 准备工作 在开始之前,请确保你的开发环境满足以下要求: Node.js (建议使用最新的 LTS 版本) npm 或 yarn (Node.js 安…

vue3中,element-plus中el-input的v-model和value的用法示例

el-input的v-model&#xff0c;邦定响应式变量 <el-col :span"6"><el-form-item label"检验类别" prop"verifyType"><el-input v-model"applyAllInfo.applyBasicInfo.verifyTypeName" readonly /></el-form-item…

策略模式随笔~

若感行文枯燥&#xff0c;请移步至文末Gitee地址中查看源码自行测试感受策略模式之魅力。 一、策略模式的核心概念 策略模式的定义 定义算法族&#xff0c;封装每个算法&#xff0c;使其可互换。 核心三要素 Context&#xff1a;上下文&#xff0c;负责接收客户端请求并委托…

Linux的目录结构(介绍,具体目录结构)

目录 介绍 具体目录结构 简洁的目录解释 详细的目录解释 介绍 Linux的文件系统是采用级层式的树状目录结构&#xff0c;在此结构的最上层是根目录“/”。Linux的世界中&#xff0c;一切皆文件&#xff08;比如&#xff1a;Linux会把硬件映射成文件来管理&#xff09; 具体目…

AWS CloudFront加速S3配置跨域

1、点击分配 源我们就选择S3–>选择我们要加速的S3存储桶 2、创建OAC访问方式 在我们的来源访问处–>来源访问控制设置(推荐)–>选择创建新的OAC(Create new OAC)–>自定义名字按默认选项保存–>选择刚刚新创建的OAC 3、选择查看器的配置 根据具体情况&#x…

进程控制(上)【Linux操作系统】

进程控制 写时拷贝 本质是一种减少深拷贝的方法 Linux中有很多拷贝的场景都用得上写时拷贝&#xff0c;下面以创建子进程时的写时拷贝为例&#xff1a; 子进程被创建的时候&#xff1a; 会继承父进程的mm_struct和页表 所以子进程刚刚继承时&#xff0c;父子进程的代码和数据…

Flutter 强制横屏

在 Flutter 中&#xff0c;可以通过设置 SystemChrome 来强制应用横屏显示。以下是实现这一功能的详细步骤和代码示例&#xff1a; 步骤 1&#xff1a;导入必要的包 确保在文件顶部导入了 services.dart 包&#xff0c;因为 SystemChrome 类位于该包中。 import package:flut…

Git完全指南:从入门到精通版本控制 ------- Git核心命令(6)

Git核心命令完全指南&#xff1a;从入门到高效协作 前言 在软件开发领域&#xff0c;Git已成为现代版本控制的代名词。据统计&#xff0c;全球超过90%的开发团队使用Git进行代码管理。然而&#xff0c;许多开发者仅停留在基础命令的机械使用层面&#xff0c;未能真正掌握Git命…

关于Newtonsoft.Json

历史 Newtonsoft.Json&#xff08;也称为 Json.NET&#xff09;是由 James Newton - King 开发的一个开源的 JSON 处理库&#xff0c;它于 2007 年首次发布。在早期&#xff0c;.NET 平台缺乏一个强大且灵活的 JSON 处理工具&#xff0c;Newtonsoft.Json 应运而生&#xff0c;…

git reset详解

一、git reset 的核心作用 用于 移动当前分支的 HEAD 指针 到指定的提交&#xff0c;并可选择是否修改工作区和暂存区。 ⚠️ 注意&#xff1a;若提交已被推送到远程仓库&#xff0c;强制重置&#xff08;--hard&#xff09;后需谨慎操作&#xff0c;避免影响协作。 二、三种模…

【unity游戏开发入门到精通——UGUI】CanvasScaler画布缩放器组件

注意&#xff1a;考虑到UGUI的内容比较多&#xff0c;我将UGUI的内容分开&#xff0c;并全部整合放在【unity游戏开发——UGUI】专栏里&#xff0c;感兴趣的小伙伴可以前往逐一查看学习。 文章目录 一、CanvasScaler画布缩放器组件是什么二、CanvasScaler的三种适配模式1、Cons…

Kubernetes控制平面组件:API Server Webhook 授权机制 详解

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…

Python自动化办公

第五篇&#xff1a;Python自动化办公&#xff1a;10行代码搞定重复性工作 适合读者&#xff1a;职场人士、数据分析师 | 阅读时长&#xff1a;12分钟 引言 每天重复处理Excel、PDF或邮件&#xff1f;Python可以帮你自动化这些枯燥任务&#xff0c;节省90%的时间。本文通过实际…

【3】k8s集群管理系列--包应用管理器helm之chart资源打包并推送到harbor镜像仓库

一、chart资源打包 helm package ./web-chart # 当前目录会生成一个tgz的压缩文件二、安装help push插件&#xff08;用于推送前面打包的文件&#xff0c;到镜像仓库&#xff09; .1 下载help-push二进制文件 wget https://github.com/chartmuseum/helm-push/releases/down…

【SpringBoot Druid Mysql多数据源整合】

SpringBoot Druid Mysql多数据源整合 一、背景二、配置结果2.1 SpringBoot java 类配置2.1.1 启动类配置2.1.2 java Config配置 2.2 SpringBoot yml 配置 三、mybatis插件配置3.1 PageHelper的yml配置3.2 mybatis设置自定义字段默认值 四、配置解释 一、背景 公司项目需要连接另…

GGML源码逐行调试(中)

目录 前言1. 简述2. 加载模型超参数3. 加载词汇表4. 初始化计算上下文5. 初始化计算后端6. 创建模型张量7. 分配缓冲区8. 加载模型权重结语下载链接参考 前言 学习 UP 主 比飞鸟贵重的多_HKL 的 GGML源码逐行调试 视频&#xff0c;记录下个人学习笔记&#xff0c;仅供自己参考&…