惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MongoDB | Blog
MongoDB | Blog
V
V2EX
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
有赞技术团队
有赞技术团队
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
月光博客
月光博客
爱范儿
爱范儿
D
Docker
U
Unit 42
P
Proofpoint News Feed
I
InfoQ
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
L
LangChain Blog
V
Visual Studio Blog
IT之家
IT之家
Vercel News
Vercel News
G
Google Developers Blog
M
MIT News - Artificial intelligence
美团技术团队
The GitHub Blog
The GitHub Blog
阮一峰的网络日志
阮一峰的网络日志
MyScale Blog
MyScale Blog

博客园 - hrx521

微信公众号H5开发踩坑记:为什么POST返回的页面会显示HTML源码 SQL NOT IN 子查询存在 NULL 的经典行为陷阱--NULL 三值逻辑(TRUE / FALSE / UNKNOWN) SQL用窗口函数做逐行累计的实用用例 我的蝶翼斑马鱼繁殖要领总结 如何从操作系统的角度,理解C#语言的Async Await 异步机制内部状态机的运行原理? C#扩展方法对软件工程构建的促进示例和总结 基于原数据库新创建一个带部分数据做为初始数据的数据库的思路 发布和更新自己的nuget包 Rust的枚举类型Enum Rust语言特色语法记录 Rustup-init.exe安装后执行cargo run 报错:`link.exe` returned an unexpected error的解决办法 FastReport.OpenSource .Net下开源免费报表打印组件 SQL使用Merge在一个语句中完成插入、更新和删除操作 IIS应用程序回收导致应用中Hangfire等后台任务无法正常启动工作的解决方法 Microsoft.AspNetCore.Identity 的使用记录 C# xml文档反序列化记事 债券与债券基金 Linq补充学习 Blazor学习记录_12._IIS部署_组件的引用_HTML元素的引用 Blazor学习记录_11.身份认证与授权 Blazor学习记录_10.C#和JS互操作_访问WEB API Blazor学习记录_9.预呈现_渲染树
sql调优记录,不要在join on 条件中使用过多的条件
hrx521 · 2025-03-26 · via 博客园 - hrx521

0.性能低下的。错误的做法 其中 join on 子句中的附加条件“and d.rq between '2025-03-01' and '2025-03-26 23:59:59' and d.ifcheck=0” 是重大问题。

select a.id,a.orderId,a.hid,a.openid,a.amount,a.thirdPayNo,a.payAccountId,a.createTime,a.[state],b.fh,b.cname,c.item_clsname as areaName,d._id payAccountBillNo
from WeixinOrder a
left join payAccountM d on a.payAccountId=d.id and d.rq between '2025-03-01' and '2025-03-26 23:59:59' and d.ifcheck=0
join House b on a.hid = b.id
join TreeInfo c on SUBSTRING(b.itemno, 1, 9) = c.item_clsno
where a.createTime between '2025-03-01' and '2025-03-26 23:59:59' and a.state=0

1.去掉上面加粗部分后,性能起飞

select a.id,a.orderId,a.hid,a.openid,a.amount,a.thirdPayNo,a.payAccountId,a.createTime,a.[state],b.fh,b.cname,c.item_clsname as areaName,d._id payAccountBillNo
from WeixinOrder a
left join payAccountM d on a.payAccountId=d.id
join House b on a.hid = b.id
join TreeInfo c on SUBSTRING(b.itemno, 1, 9) = c.item_clsno
where a.createTime between '2025-03-01' and '2025-03-26 23:59:59' and a.state=0

2.以下采用放到select语句的子查询中,也一样性能起飞。经测试,与上面性能相当。

select a.id,a.orderId,a.hid,a.openid,a.amount,a.thirdPayNo,a.payAccountId,a.createTime,a.[state],b.fh,b.cname,c.item_clsname as areaName,
(select top 1 _id from payAccountM m where m.id=a.payAccountId) payAccountBillNo
from WeixinOrder a
join House b on a.hid = b.id
join TreeInfo c on SUBSTRING(b.itemno, 1, 9) = c.item_clsno
where a.createTime between '2025-03-01' and '2025-03-26 23:59:59' and a.state=0