首页 / 知识
显式与隐式SQL连接
2023-04-14 06:34:00

Explicit vs implicit SQL joins
显式和隐式内部联接是否存在效率差异?
与
在性能方面,它们是完全相同的(至少在SQL Server中)。
PS:请注意,自SQL Server 2005起不推荐使用 弃用"旧样式" JOIN语法:只是部分事情 就我个人而言,我更喜欢连接语法,因为它可以更清楚地表明表是如何连接以及如何连接的。尝试比较较大的SQL查询,从8个不同的表中进行选择,然后在where中进行大量筛选。通过使用联接语法,您可以将联接表的部分分离到要过滤行的部分。 在MySQL 5.1.51上,两个查询的执行计划相同:
这是一个非常简单的情况;它绝不证明查询优化器不会在更复杂的情况下产生混乱并生成不同的计划。 第二种语法具有交叉联接的可能性:您可以将表添加到FROM部分,而无需相应的WHERE子句。这被认为是有害的。 您给出的第一个答案使用了所谓的ANSI连接语法,另一个答案有效并且可以在任何关系数据库中使用。 我同意grom,您应该使用ANSI连接语法。正如他们所说,主要原因是为了清晰。而不是拥有带有很多谓词的where子句,其中一些联接表和其他限制了使用ANSI联接语法返回的行,而是使您盲目地弄清楚了哪些条件正在用于联接表,哪些条件用于限制表。结果。 @lomaxx:只是为了澄清一下,我很确定SQL Serv 2005支持上述两种语法。但是不支持以下语法
具体来说,不支持外部联接(* =)。
我认为您正在考虑不赞成使用的* =和= *运算符与"外部连接"。 我刚刚测试了给定的两种格式,它们在SQL Server 2008数据库上可以正常工作。以我为例,他们得出了相同的执行计划,但是我不能自信地说这永远是正确的。 在某些数据库(尤其是Oracle)上,联接的顺序可能会对查询性能产生巨大的影响(如果有两个以上的表)。在一个应用程序上,在某些情况下,我们实际上有两个数量级的差异。如果使用正确的提示语法,则使用内部连接语法可让您对此进行控制。 您没有指定要使用的数据库,但是有可能表明SQL Server或MySQL没有什么实际的区别。 在性能方面,应该没有任何区别。显式联接语法对我来说似乎更干净,因为它在from子句中清楚地定义了表之间的关系,并且不会弄乱where子句。 正如Leigh Caldwell所说的那样,查询优化器可以根据功能上看起来像同一条SQL语句的内容生成不同的查询计划。有关此内容的更多信息,请查看以下两个博客文章: Oracle Optimizer团队的一篇帖子 来自"结构化数据"博客的另一篇文章 希望您觉得这很有趣。 基本上,两者之间的区别在于,一种是以旧的方式编写的,而另一种是以现代的方式编写的。就我个人而言,我更喜欢使用内部,左侧,外部,右侧定义的现代脚本,因为它们更具解释性,并且使代码更具可读性。 当处理内部联接时,可读性也没有真正的区别,但是,在处理左右联接时,它可能会变得复杂,因为在较旧的方法中,您将得到如下所示:
上面是写左连接的旧方法,而不是下面的方法:
如您所见,脚本的现代编写方式使查询更具可读性。 (顺便说一句,对于右联接,对于外联接,则稍微复杂一些)。 回到样板,对于SQL编译器,以相同的方式处理查询,如何编写查询没有影响。我已经在Oracle数据库中看到了两者的混合情况,这些数据库中有很多人在写它,无论是老年人还是年轻人。同样,它归结为脚本的可读性以及与您一起开发的团队的可读性。 以我的经验,使用子句中的交叉联接常常会导致大脑受损的执行计划,尤其是在使用Microsoft SQL产品的情况下。例如,SQL Server尝试估算表行数的方法非常可怕。使用内部联接语法使您可以控制查询的执行方式。因此,从实际的角度来看,鉴于当前数据库技术的简单性,您必须使用内部联接。 |
最新内容
相关内容
linux连接多条命令?
linux连接多条命令?,工具,情况,命令,分行,服务,地址,连续,终端,窗口,主机,linux怎么使多条命令同时执行基本上,您可以通过单一控制台窗口控制所linux有线网连接命令?
linux有线网连接命令?,系统,网络,软件,电脑,密码,地址,信息,虚拟机,终端,命令,linux系统下怎么连接网络1、启动Linux,然后在网络设置中将eth0设linux编译连接命令?
linux编译连接命令?,系统,代码,环境,工具,文件,资料,电脑,百度,终端,命令,在linux0.12系统中编译0.12内核时,使用什么命令1、linux的源码是在/linux上的软连接命令?
linux上的软连接命令?,系统,设备,位置,链接,文件,数据,交通,地方,信息,地址,Linux查看文件内容.创建.查看软硬链接命令示例命令1:查看文件内容mac命令连接linux?
mac命令连接linux?,系统,软件,电脑,密码,公司,网络,地址,通用,服务,发展,macbook苹果电脑系统如何使用“终端”远程登录linux主机?Windows远程远程连接命令linux?
远程连接命令linux?,服务,系统,密码,网络,软件,名称,电脑,资料,地址,信息,远程登录Linux服务器的命令是什么?1、若改变了端口号,则为:ssh登录名@linux命令行连接达梦?
linux命令行连接达梦?,系统,传播,概念,公司,环境,信息,资料,数据库,浏览器,版本,达梦数据库shell脚本怎么获取查询语句结果集1、备注:getDbUserlinux性能测试命令?
linux性能测试命令?,数据,系统,工具,标准,设备,地址,情况,基础,网络,环境,如何排除linux系统的读写缓存进行磁盘性能测试chkdsk。chkdsk的全称linux查询连接命令?
linux查询连接命令?,网络,服务,系统,信息,单位,地址,状态,管理,基础,命令,如何查看linux连接其他的服务器在IP1服务器上执行下面的命令:IP2=191linux命令行远程连接?
linux命令行远程连接?,地址,密码,系统,环境,工作,服务,电脑,图片,网络,软件,远程登录Linux服务器的命令是什么?1、若改变了端口号,则为:ssh登录linux远程连接命令?
linux远程连接命令?,软件,密码,系统,名称,图片,网络,电脑,地址,信息,健康,Xshell远程桌面连接Linux系统怎么操作填写登录用户名在弹出的SSH用linux连接文件命令?
linux连接文件命令?,系统,工具,标准,情况,数据,命令,单位,发行,数字,正规,Linux如何使用正则表达式命令?文本文件操作命令1、grep : 最早的文本