多表逗号隔开联查, inner join , left join 的理解--如何优化慢查询

Unity游戏开发客户端面经——设计模式(初级) Unity游戏开发客户端面经 之 设计模式 篇 阅读详情

今天在写一个业务的时候, 遇到了一个慢查询。
我习惯写业务之前先将sql写好, 这样可以确保写业务之前数据源是对的,并且可以先看到自己写的sql慢不慢,有没有可以优化的地方。 今天在写sql时就遇到了一条很慢的sql.
我最开始写的sql是这样的:

		-- 总共1517条结果
  	   SELECT
       count(*)
       FROM DZShare.T_C_HISDATA_1H H ,  DZShare.T_C_AI_D A  , DZShare.T_Y_SBBHDEVICE_SITE S ,
       DZShare.T_C_Item_D I 
       where H.Pid=A.Pid and A.SubstationId= S.station_id and A.ItemCode=I.ItemCode  

这条sql看着 很简单。 H表关联了A表, A表有关联了S表。
但是这条sql查询时确用了一分多钟。
为什么? 有一个注意的地方是, H表的数据量很大!
写sql有个技巧是小表撬大表, 而这条sql 用H这个数据量很大的表撬了其他小表。
我有一次修改了sql 。
修改后的如下:

		-- 总共查询出 7498549 条数据
        SELECT
              count(*)
        FROM DZShare.T_C_HISDATA_1H H
        LEFT JOIN DZShare.T_C_AI_D A ON H.Pid=A.Pid
        LEFT JOIN DZShare.T_Y_SBBHDEVICE_SITE S ON A.SubstationId=S.station_id
        LEFT JOIN DZShare.T_C_Item_D I ON A.ItemCode=I.ItemCode  

改成这样我才明白, 原来left join 和多表逗号连接 是不同的。
**

多表逗号连接并用where 条件做连接条件, 等价于 inner join 内连接

**
所以正确的修改后的sql应该是:

        SELECT
              count(*)
        FROM 
        DZShare.T_Y_SBBHDEVICE_SITE S
        inner join DZShare.T_C_AI_D A  on A.SubstationId=S.station_id
        inner join DZShare.T_C_Item_D I  ON A.ItemCode=I.ItemCode
        inner join DZShare.T_C_HISDATA_1H H ON H.Pid=A.Pid

这条语句想对于前面第一条, 变化是数据量很大的表H被放到了后面, 数据量小的表S被放到了前面。
这样满足了小表撬大表的条件, 查询速度也变快了。

总结就是, 多个表做连接关联是, 数据量小的表form关键字放前面,数据量越大的表越靠后, where条件的表顺序也是如此。

uni-app - 最新实现将 uniapp 项目打包编译为 H5 网站,并上传部署到 web 服务器进行发布预览(从打包到发布完整流程步骤,Hbuilder 编译打包 h5 发行到 web 服务器) uniapp,打包h5,打包编译H5网站,怎么打包h5,uniapp打包成H5部署到服务器教程,uniapp打包H5页面发布到服务器,uniapp开发,打包成H5部署到服务器_uniapp打包h5,uniapp如何打包h5项目,怎么把项目打包成H5,uniapp如何打包成H5并且放到web端上,打包成h5部署到服务器的步骤,打包发行到h5报错怎么办,如何将uniapp打包的h5网站放到服务器上,编译打包后怎么放到web服务器中,如何将uniapp开发的H5打包并部署到服务器,部署使用uniapp开发的h5 阅读详情

相关推荐

保姆级教程:从 TLE 数据源获取到 Cesium 卫星轨迹可视化全流程(含常见报错排查)

本文提供从TLE数据源获取到Cesium卫星轨迹可视化的全流程保姆级教程,涵盖数据预处理、satellite.js计算、Cesium集成及性能优化等关键步骤,并针对常见报错提供详细排查方案,帮助开发者高效实现卫星轨迹可视化。

weixin_29002595的博客 294

SQL表连接详解:JOIN与逗号(,)的使用及其性能影响

在这个详细的解释中,我们将深入探讨SQL中表连接的概念,特别是JOIN和逗号(,)在连接表时的不同用法及其对查询性能的影响。通过实际示例和背后的逻辑分析,我们将揭示在不同场景下选择哪种连接方式更为合适。

好好学习日记 5256

10分钟学会工程领域Hypermesh与Abaqus联立处理大量铆钉连接简化做法

铆钉连接是一种可靠且高强度的机械连接方式,广泛应用于多个领域。但是,工程结构上铆钉连接往往以较大的数量出现,若按照常规的一个个去选择生成,处理1个铆钉连接点需要1分钟来算,300个铆钉需要5个小时,耗费大量的时间成本。给出了一种高效处理铆钉连接的方法,提升效率50倍以上。

qq_34933927的博客 1612

sql之left join、right join、inner join和逗号的区别

http://blog.youkuaiyun.com/vvhesj/article/details/8936025 0.join查询平时没怎么注意,最近又看到,mark一下,强化记忆; 1.平时都是用的逗号的模式:select * from a,b where a.id=b.id,逗号的模式等于inner join和join; 2.left join 和 right join相反,效果一致,

行走的IT 9530

Blender骨骼绑定实战:如何用IK控制器让角色动作更自然(附常见问题解决)

本文深入探讨了Blender中IK控制器的实战应用,旨在解决角色动作僵硬问题。通过对比IK与FK的核心差异,详细解析了IK链的构建、参数设置及极向目标的使用,并提供了控制器定制、IK/FK无缝切换等高级技巧,帮助动画师实现更自然、符合直觉的角色动画。

weixin_29243279的博客 436

论文深度解析:基于大语言模型的城市公园多维度感知解码与公平性提升

本文针对城市公园感知测量的精细化不足与公平性评估缺口,提出了一套融合社交媒体数据与大语言模型(LLM)的创新分析框架。通过领域适配微调开发的Park-Perception-LLM模型,实现了对感知可达性、可用性、吸引力三大核心维度83%-91%的高精度分类。将该感知指标创新性地融入增强两步浮动集水区法(E2SFCA),以香港高密度城市为案例,系统揭示了公园质量与数量的空间不平等及错配模式。借助多元回归模型,深入挖掘了公园内部特征、宏观建成环境、微观街道景观及时间因素对感知的影响机制。

May the Force be with you 1014

终于知道SQL中多表查询中逗号是隐式的内连接了,inner join关键字是显示的内连接。。。

困惑了许久,今天终于知道from后面两个表用“,”分隔原来是隐式的内连接。 内连接分为显示的内连接和隐式的内连接,显示的内连接有inner join关键字,隐式的内连接用逗号分隔两个数据库表。隐式的内连接没有on关键字表示的条件,条件的表示只能用where,用inner join关键字查询出的结果为连接条件和查询条件筛选后的笛卡尔积。 ...

qq_38797831的博客 3918

大厂硬件笔试机试题ASIC设计方向-卷3

本文提供了30道硬件工程师机试题目,涵盖数字逻辑、模拟电路、CMOS和信号处理等核心领域。选择题和判断题均配有详细解析,重点考察Verilog编程、CMOS特性、触发器设计、采样定理等知识点。题目难度适中但覆盖面广,如Verilog中阻塞/非阻塞赋值的区别、CMOS静态功耗来源、Nyquist采样定理、通用逻辑门判断等。备考建议强调掌握逻辑门设计、Verilog时序电路编写和CMOS特性理解。这些题目反映了华为等大厂硬件机试的典型考查内容,通过系统复习可有效提升机试成绩,为后续面试奠定基础。

启芯硬件的博客 541

MYSQL 多表联结

参考: JOIN与逗号的区别 交叉连接的操作只有两种:INNER JOIN和CROSS JOIN。 JOIN,是 INNER JOIN的缺省写法。 CROSS JOIN,因为有明确的语义,就是要生成笛卡尔全集。因此之后就不容许跟on条件。 INNER JOIN,是对笛卡尔全集的补充处理。因此可以跟条件。由于笛卡尔集是将左右表同等对待,也就是将临时表中每个行作为一个整体看待,因此ON的条件就是对整行进行的处理,处理的结果就如同过滤。对于不满足条件的整行,将不会传递给WHERE语句,也就不会出现在最终的结果集

1 467

【保姆级教程】基于UNet++&MobileNetv3的语义分割模型从训练到RK3588部署:让边缘AI落地效率提升300%

通过SMP库一键构建encoder_name="mobilenet_v2", # 选择MobileNetv3作为骨干encoder_weights="imagenet", # 加载预训练权重加速收敛in_channels=3, # 输入图像通道数(RGB)classes=29, # Cityscapes数据集类别数activation=None # 输出无激活,便于后续损失计算本教程从“模型设计-训练-转换-边缘部署”全链路拆解了。

FJN110的博客 253

用一张分析型 CDS Query 看清争议案件新增与结案节奏:C_OpenClosedDisputeCase 深度解读

应收账款争议管理中的关键CDS视图分析 摘要:C_OpenClosedDisputeCase是SAP系统中用于监控应收账款争议案件的重要CDS视图,提供三个时间窗口(当日、近5天、当月)的新增与结案数据。该视图通过"创建vs解决"的净变化指标,帮助财务团队实时掌握争议管理趋势,特别适用于多币种跨国企业的现金流管理。其核心价值在于将争议管理从被动"救火"转变为可量化运营,通过统一汇率换算和关键日期参数,为管理层提供标准化的运营仪表盘。视图采用特权访问模式,需通过上层应用

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 122

多表查询

多表查询:在查询为多张表的数据时,通常在from表和表之间使用逗号,作为间隔符号。 1.内连接inner join,相当于两个集合关键字段的全交叉记录。 1:select * from table_name1inner join table_name2; 2:select * from table_name1,table_name2; 2.等值连接,将有等值条件筛选的称为等值连接,也就是相同外键约束的组合。 1:select * from table_name1 inner join tabl.

zh_tnis的博客 9764

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

sql用逗号连接多张表对应哪个join?

四种join的区别已老生常谈: INNER JOIN(也可简写为JOIN): 如果表中有至少一个匹配,则返回行LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行FULL JOIN: 只要其中一个表中存在匹配,就返回行 那么问题来了,还有一种常见的写法是将表用逗号隔开,那这个又是怎么连接的呢。 先看这两张表

淡然坊 3万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

假人有限元模型

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

left join 逗号分隔字段查询 mysql和postgresql

商品表 goods 有学校字段 school_ids 学校字段 school_ids 中保存学校表 school 的id,如果商品包含多个学校则多个id使用逗号分隔保存 school: goods: 最终查询:两个表关联,goods表中字段中school_ids 逗号隔开和school表中的id关联 MySQL版: SELECT g.id,g.school_ids,GROUP_CONCAT(s...

好巧~我看到你了 1736

NTscan扫描工具

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

连表查询 和 逗号隔开的区别_多表查询

表的加法 Union 加法会把表当中重复的值删掉如果想要保留重复的行,用union all, 这样重复的行就会原封不动地出现,如下图: 2. 表的联结 Join关系数据库里,各个表之间都是有关系的比如学生表和成绩表是由 ‘学号’联结起来的2.1 常用的联结2.2.1交叉联结 cross joinA表的所有行和B表的所有行分别联结在一起2.2.2 内联结 inner join查找出同时存在于两张表的...

weixin_39895995的博客 935

left join on 里用逗号分隔表名

今天看别人代码看到一段看不懂的东西,     left join 之后的 on 子句 , 右面紧接了 逗号 + 表名 看不懂什么意思,网上找不到说明 经过研究发现语法如下: 1例子:47select *48  from TABLE_A a49 left join TABLE_B b50    on a.col1 = b.col1, TABLE_C c, TAB

学孩无牙哭做粥 2669

如何将SQL查询出的两列合并成一列显示,并用逗号隔开

如何将SQL查询出的两列合并成一列显示,并用逗号隔开 先给出一个表 DROP TABLE IF EXISTS `apps`; CREATE TABLE `apps` ( `id` int NOT NULL AUTO_INCREMENT, `app_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '站点名称', `url` varchar(255) CHARAC

王大锤的博客 1万+

hive表间的四种优化

hive的优化问题

weixin_49196517的博客 1115

Inner Join与Left Join

Inner Join与Left Join内连接、外连接、半连接区别是什么?先创建一个示例表及数据:postgres=# create table t10(id1 int,id2 int); CREATE TABLE postgres=# create table t11(id1 int,id2 int); CREATE TABLEpostgres=# select * from t11; id1...

帅的数说 503

SQL多表连接查询

简单连接是使用逗号将两个或多个表进行连接。其查询结果是通过笛卡尔积产生的表——就是由一个基表中每一行与另一个基表的每一行连接所生成的表。查询结果的行数是两个基表行数的积。而使用WHERE条件,可以有效过滤掉无意义的数据。

FFFLLLLLL的博客 1283

mysql 两列用逗号连接_MySQL的几种连接 join/inner join/cross join/逗号/left join/right join/natural join...

转载请注明出处!!之前数据表连接操作多使用逗号或者join,对几种连接的概念一直浑浑噩噩,最近研究了一波,把这些连接的区别搞明白了。连接:A xjoin B(主表 操作 关联表)select过程:from->where->group by->having->order by->limit在不使用on语法时,join、inner join、逗号、cross join结果...

weixin_36185512的博客 1448

记录大佬面经第十二周

第一天 抖音123面 1、sql语句中,表逗号表,sql会如何优化? 2、连接时mysql底层是怎么做的? 3、给定正整数n,问1-n组成的二叉搜索树有多少? 4、热点数据? 5、zset底层如何实现? 6、zset取单个数据的时间复杂度? 7、跳跃表的原理? 8、面值[1,3,4]的硬币,输入n,输出最少组成n的硬币个数以及组成的硬币? 9、java是怎么进...

qq_31032293的博客 250

SQL用逗号分隔两张表查询

select tab1 a,tab2 b where a.id=b.id(+)

u010536669的博客 1787

mysql查询逗号,分隔的多个id连表查询

先来几个SQL看看效果 SELECT i.*,n.* FROM i LEFT JOIN n on FIND_IN_SET(n.id, i.n_id) GROUP BY n.id 效果图: 想把信息都放一行里面怎么办呢?我们就要用到group_concat函数了 SELECT i.*, GROUP_CONCAT(n.id) nid, GROUP_CONCAT(n.name) name FRO...

数据解构的博客 3990
上一篇: 搭建后台系统的一些总结教训
下一篇: 对List中的map或bean的某个属性排序
libingbojava
博客等级 码龄9年 64粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值