子查询和关联查询 效率

JOIN 与子查询的性能对比分析 摘要:文章对比分析了SQL中JOIN与子查询的性能差异。JOIN操作通常能生成更高效的执行计划并更好利用索引,特别适合大表关联;而子查询可能在复杂场景导致临时表或嵌套循环。现代优化器会将许多子查询(如EXISTS/IN)转换为JOIN,但特定场景(如存在性检查)中子查询仍具优势。实际应用建议:多表关联优先使用JOIN,简单判断存在性可用子查询,并通过执行计划分析和基准测试验证性能。数据库新特性如哈希连接、JIT编译等可能影响传统结论。 阅读详情

MSDN对子查询的定义是这样的:

     可以将一个查询的结果用作另一个查询的输入。可以将子查询的结果用作使用 IN( ) 函数、EXISTS 运算符或 FROM 子句的语句。

     一条好的值得称赞的规则是尽量用连接代替所有的子查询。优化器有时可以自动将子查询“扁平化”,并且用常规或外连接代替。但那样也不总是有效。明确的连接对选择表的顺序和找到最可能的计划给出了更多的选项。当你优化一个特殊查询时,了解一下是否去掉自查询可产生很大的差异。这段话出自http://www.innovatedigital.com/htm_speek/SQLServerOpt.shtml它显然告诉我们在查询的时候最好不要用子查询,当时我并不太在意,至到我有一次遇到了这样的情况。  
      
     现在的网站主要的压力都来自于数据库,频繁的数据库访问经常会使服务器死机。我的原则就是尽量减少数据库的连接,能一次性取出的决不多连接数据库一次,但是有时候并不完全是这样。郁闷,无解。    
 
     下面一条SQL语句里面有一个子查询,info.RESOURCE_VOLUMECOUNT,它是指一个电影共有多少集.这个字段是int类型的.子查询的目的就是计算出一个电影在资源表中总共有多少集(实际存在的), 两者做减法操作就可以计算出这个电影共缺多少集(lastCount)我们知道在这条语句执行的时候,外层记录查询一次在计算 lastCount字段的时候又要查询表:电影表一次.如果最外层有10条记录,那么执行这次查询一共要扫描电影表11次,连接数据库1次.
      

    基于有的朋友看不明白我写的SQL语句,可能是因为我写的有些字段和本案例没有太大关系的原因,现在特将它们做一个替换.


经过个人实践,证明子查询效率特别低,而一般的子查询都可以由关连查询来实现相同的功能,关联查询的效率要提高很多,所以建议在数据查询时避免使用子查询(尤其是在记录很多时),而最好用关联查询来实现。
      现在举例说明。
     我做的是简单的北京公交查询系统,用的是mysql数据库,数据库包含两张表,line表和track表。line表有lid和lname两个属性,分别表示线路id和线路名称。track表有lid,seq,sname,lo,la五个属性,分别表示站点所在的线路id,站点在线路上的顺序,站点名称,站点的经度和纬度。现在要查询某一给定线路名称的线路上所有站点的经度和纬度。其中line中有1112条记录,track中约有20万条记录。
     子查询sql语句:select  lo,la  from  track where lid in (select lid from line where lname like '%lname%');
     关联查询sql语句:select lo,la from track,line where line.lname like  '%lname%' and line.lid=track.lid;
     子查询运行时间为5分48秒;而关联查询耗时不足一秒。事实胜于雄辩,关联查询的优势不言而喻。
    在关联查询时要注意:where子句中一定要包含表之间的连接条件,如 line.lid=track.lid,否则查询结果会完全超乎我们的想象,造成不必要的麻烦。   

一文详解SQL关联子查询 简介:本文主要介绍什么是关联子查询以及如何将关联子查询改写为普通语义的sql查询。 本文主要介绍什么是关联子查询以及如何将关联子查询改写为普通语义的sql查询。 在背景介绍中我们将讲讲常见的关联子查询的语义,关联子查询语法的好处以及其执行时对数据库系统的挑战。第二章中我们将主要介绍如何将关联子查询改写为普通的查询的形式,也就是解关联。第三章中我们会介绍解关联中的优化方法。 一 背景介绍 关联子查询是指和外部查询有关联的子查询,具体来说就是在这个子查询里使用了外部查询包含的列。 因为这种可以使用. 阅读详情

相关推荐

数据库——多表查询和子查询

1.联合查询 union 合并去重复 两个的集合并集;并且会排重 如果是一个字段,重复直接去掉,如果是多个字段,都相同才会去重。 代码实现: select name,sex from studentinfo UNION #联合查询,会自动去重复 select teacherName,sex from teacher union all:联合但是不会去重 代码实现: select name,sex from studentinfo UNION all#联合查询,不会自动去重复

weixin_59755109的博客 5464

连接查询和子查询哪个效率高

需要进行多表查询的情况下,用连接查询和子查询哪个效率高? 1、什么是子查询?举个简单的例子,那么子查询有什么优劣呢? 子查询 (内查询) 在主查询之前一次执行完成。 子查询的结果被主查询(外查询)使用 。 可以用一个子查询替代上边的的表名。 子查询,将查询操作嵌套在另一个查询操作中。先执行子查询,再执行外查询 注:在查询时基于未知的值时,应使用子查询 子查询可以返回多个结果/单个结果,结果个数不同应该使用不同的操作符 通过子查询不难看出,可以根据employee_id查到department_

weixin_44041590的博客 4万+

【DataBase】使用联表查询比较慢如何进行优化?

如果查询的字段比较多,就需要对sql语句进行优化了,通过explain关键字加在慢sql前执行看是否走的索引,如果没有走索引就创建索引。

m0_64210833的博客 9573

sql查询--join与子查询对比

一般来说数据库查询最好不要用join查询,因为比较慢,但是与子查询相比,join的查询效率还是比子查询高的,个人建议,不要用子查询! 原因是从网上找到的,可以参考:因为使用子查询时,数据库还要建一张临时表,所以效率才会比左连接来得慢(刚开始还以为没准回和索引有关系,事实证明我错了) SQL中查询的一些对比情况总结: select xxx  from A  where xx = (se

丽卓 1万+

揭秘MySQL性能优化:为什么子查询和JOIN有时不被推荐?

子查询是指嵌套在另一个查询中的查询。它可以出现在SELECTFROM或WHERE子句中。-- 使用子查询查找订单金额大于平均订单金额的客户。

墨夶的博客 1078

MATPOWER的安装详细教程

MATPOWER的安装包实际为一个程序包,安装教程很简单,详见本文。

半个月亮Zz的博客 3万+

【SQL】关联子查询和JOIN查询哪个效率更高

• 测试数据(如网页5中MySQL千万级数据查询耗时对比)表明,非索引字段的关联查询在JOIN模式下性能显著优于子查询。每处理外部查询的一行记录时,都会触发一次内部子查询的执行(即每次都要扫描一次。一次性关联两个表,仅需扫描两次表(或利用索引),时间复杂度为。数据库优化器更擅长优化连接操作,尤其是当索引存在时。,而子查询可能被转换为效率较低的嵌套循环连接。:可能无法有效利用索引,导致全表扫描。:可通过索引快速定位关联记录(如。的索引),大幅减少磁盘I/O。的优化更成熟,可能自动选择。

努力撸代码ing 1188

西门子200 SMART与博图WinCC通讯全攻略:从PC Access到S7-200协议避坑指南

本文详细解析了西门子S7-200 SMART PLC与博途WinCC上位机通讯的两种主流方案:基于PC Access SMART的OPC通讯和利用博途内置S7-200协议驱动直连。文章深入对比了两种架构的优缺点、配置步骤,并提供了从网络层到软件层的深度排错指南与性能优化建议,帮助工程师高效、稳定地实现系统集成。

gg901的博客 806

MySQl:子查询和关联查询哪个效率高

MySQL:子查询 和 关联查询 哪个效率高 t1:订单表 t2:客户表 子查询: select t1.id,t1.time,(select t2.id from t,t2 where t1.userId = t2.id)as username from t1 关联查询: select t1.id,t1.time,t2.name where t1.userId = t2.id as username from t1,t2 子查询就是查询中又嵌套的查询,表连接都可以用子查询,但不是所有子查询都能用表连接替换,

live的专栏 1万+

PAT|中国大学MOOC-浙江大学翁恺-C语言程序设计习题集(更新中)

##2-0. 整数四则运算 时间限制:400 ms 内存限制:65536 kB 代码长度限制:8000 B 判题程序:Standard 作者:乔林(清华大学) 本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。 输入格式: 输入在一行中给出2个正整数A和B。 输出格式: 在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。 输入样例: 3 ...

小鱼波波波 6万+

数学分析五领域全景:实分析、复分析、泛函分析、傅里叶分析、凸分析

五种分析,五种视角,同一个目标。理解一个系统,首先要找到它的不变量。

li880862的博客 185

基于OpenCV与MediaPipe的TikTok舞蹈视频动作识别与分析实践

视频内容分析是计算机视觉领域的重要分支,其核心原理是通过图像处理和深度学习技术提取视频中的结构化信息。在技术价值层面,视频分析能够实现动作识别、内容理解和自动化标签生成,为社交媒体内容处理提供数据支撑。以舞蹈视频为例,利用OpenCV进行视频帧提取,结合MediaPipe的人体关键点检测技术,可以量化分析动作难度和服装视觉效果。这类技术广泛应用于内容创作优化、教学辅助和热门趋势分析等场景。本文基于TikTok舞蹈视频案例,详细演示了从环境配置到关键帧提取、动作强度计算的全流程实践,特别针对'地狱难度副歌舞蹈

weixin_34343308的博客 885

北京大学MuMo多模态肿瘤分类模型复现与迁移学习

本项目复现了北京大学MuMo多模态肿瘤分类模型,并针对特定医学影像数据集进行迁移学习。MuMo模型通过整合CT、MRI、PET等多模态医学影像数据,显著提升了肿瘤分类准确性。项目内容包括环境配置(Python 3.8+、PyTorch 1.9+)、数据预处理(DICOM/NIfTI格式处理、强度归一化)、多模态数据集类实现,以及训练验证测试集划分。关键特点是采用MONAI医学影像处理库,实现三维医学影像的标准化预处理流程,并支持多种模态数据的并行加载与联合训练,为后续模型复现和迁移学习奠定基础。

max500600的博客 1240

关联查询子查询效率简单比照

(1)试验目的: 此次试验简单对比下子查询和关联查询的效率(不考虑索引),结果为子查询效率较高. (2)试验思路: 通过scott.emp创建lyl_emp表,并依照insert...

conglueh193642的博客 567

豆包手机为什么能自己“玩手机”?原理是什么?豆包手机系统运行机制深度解析:读屏、抓取、推理链路全拆解

作为一个每天被前端 Bug 打醒的程序员,我这一阵子在关注“豆包手机”这个关键词,刷到的相关视频简直铺天盖地。朋友们,说句实话,我一开始也只是抱着“看看热闹”的心态,最近一位博主下面的内容,不是“它能做什么”,而是。如果你之前看过很多评测,这篇文章会给你完全不一样的视角。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1010

医疗AI知识库更新慢?提示工程架构师用Agentic AI自动更新的策略

我们的目标是用Agentic AI替代传统更新流程中的“重复劳动”,让医疗知识库(以知识图谱为例)能自动跟踪最新医学进展,把“更新周期从数月缩短到数天”。从PubMed/指南数据库自动抓取新文献;用提示工程从文本中提取结构化医学知识;自动校验新知识与旧知识的冲突;将通过校验的知识写入知识图谱。拆问题:先讲医疗知识库更新慢的3大根源;给方案:用Agentic AI设计4个“小助手”解决问题;讲原理:每个小助手的工作逻辑+提示工程技巧;做实战。

AI 原生应用开发的博客 1061

oracle基础-子查询 备份

在单行子查询和多行子查询中,内查询和外查询是分开执行的,也就是说,内查询的执行与外查询的执行没有关系,外查询仅仅是使用内查询的最终结果。在一些特殊需求的子查询中,内查询的执行需要借助外查询,而外查询的执行又离不开内查询的执行,这时,内查询和外查询是相互关联的,这种子查询就是称为关联子查询。需要补充一点的是,关联子查询不但可以作为select语句的子查询,也可以作为insert,update,delete语句的关联子查询。在Oracle 11g中,把子查询细化为单行子查询、多行子查询、关联子查询。

geminigoth的博客 1071

通信原理 | python调制识别数据及代码

数据集包含了从-20dB 到+18dB 总共 20 个信噪比(步长为 2)下的 11 种调制信号, 包括 AM-DSB、 AM-SSB 和 WBFM 三种模拟调制信号,以及 BPSK、 QPSK、 8PSK、 CPFSK、 GFSK、 PAM4、 QAM16 和 QAM64 八种数字调制信号。其中信号的中心频率为 200KHz,采样频率为 1Msamp/s,且每个信噪比下每种调制信号包含 1000 个信号。其中每个信号包含 IQ 两路数据,且每一路数据都包含有 128 个采样点。

若北辰 1757

MySQL优化--关联查询、子查询、排序分组的优化

一、关联查询的优化 在做join的时候,原理为驱动表(主表)做全表扫描,对子表(被驱动表)可以利用索引进行优化,而驱动表的全表扫描是必须存在的。 建表sql CREATE TABLE IF NOT EXISTS `class` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `card` INT(10) UNSIGNED NOT NUL...

sout 1631

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Msql5子查询

文章目录前言非关联子查询基础集合比较子查询关联子查询基础EXISTS关联子查询EXISTS与IN区别关联子查询作计算字段参考 以下例子均基于 sql文件 GitHub 链接 表。 前言 子查询:无法直接从数据表中得到查询结果,需要从查询结果集中再次进行查询,才能得到想要的结果。这个就是子查询!根据子查询是否执行多此,可将子查询分为 关联子查询 和 非关联子查询。 我的理解是这样的,我们可以抽象嵌套子查询语句为: 主查询 + 子查询 ,以下是我认为的抽象算法。 非关联子查询, 获取子查询结果集; f

qq_29257201的博客 471

NTscan扫描工具

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

mysql数据库嵌套子查询_关联子查询和嵌套子查询

关联子查询和嵌套子查询 Sql代码 www.2cto.com create table EMP ( EMPNO NUMBER(4) not null, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), DEPTNO NUMBER(2) ); 如上表,要查询所有低于本部门平均工资的员...

weixin_29007135的博客 573

visio安装包

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

一文终结SQL 子查询优化

来源:https://ericfu.me/subquery-optimization/ 作者:ericfu子查询(Subquery)的优化一直以来都是 SQL 查询优化中的难点之一。关联子查询的基本执行方式类似于 Nested-Loop,但是这种执行方式的效率常常低到难以忍受。当数据量稍大时,必须在优化器中对其进行去关联化(Decoorelation 或 Unnesting),将其改写为类似于 S...

关注微信公众号【开源Linux】,后台回复『10T』,领取10T学习资源大放送,涵盖Linux、虚拟化、容器、云计算、网络、Python、Go等书籍和视频 407

SQL必知必会之子查询

SQL 允许我们进行子查询,也就是嵌套在查询中的查询。这样做的好处是可以让我们进行更复杂的查询。因为很多时候,我们无法直接从数据表中得到查询结果,需要从查询结果集中再次进行查询,才能得到想要的结果。这个“查询结果集”就是今天我们要讲的子查询。 什么是关联子查询,什么是非关联子查询 子查询虽然是一种嵌套查询的形式,不过我们依然可以依据子查询是否执行多次,从而将子查询划分为关联子查询和非关联子查询。 ...

小知了666 723
上一篇: 数据库SQL优化大总结1之- 百万级数据库优化方案
下一篇: AQtime代码覆盖率深度分析之一
imJaron
博客等级 码龄11年 121粉丝 286原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值