Sql server 数据库连接性能比较
我参与了一个项目,其中大部分查询都是通过在FROM子句中包含多个表来执行的。我知道这是合法的,但我总是使用显式联接 例如,两个表(使用SQL Server DDL) 如果我想找到通用汽车的车型,我可以:Sql server 数据库连接性能比较,sql-server,oracle,join,Sql Server,Oracle,Join,我参与了一个项目,其中大部分查询都是通过在FROM子句中包含多个表来执行的。我知道这是合法的,但我总是使用显式联接 例如,两个表(使用SQL Server DDL) 如果我想找到通用汽车的车型,我可以: 从汽车c、制造商m中选择型号名称,其中c.ManufacturerID=m.ManufacturerID和m.Name='General Motors' 或 从c.ManufacturerID=m.ManufacturerID中选择车型名,其中m.Name='General Motors' 我的
从汽车c、制造商m中选择型号名称,其中c.ManufacturerID=m.ManufacturerID和m.Name='General Motors'
或
从c.ManufacturerID=m.ManufacturerID中选择车型名,其中m.Name='General Motors'
我的问题是:一种形式比另一种更好吗?除了在Oracle vs SQL Server中如何定义表之外,在Oracle或SQL Server中,一种连接形式是否比另一种更好?如果包括更多的表,比如3或4,会怎么样?假设查询被构造为返回一个等价的记录集,那么这会改变性能特征吗
我的问题是:一种形式比另一种更好吗
他们不应该这样做。您可以检查您的执行计划以确定,但是我使用过的每个RDBMS都会为逗号(ANSI-89)联接生成与ANSI-92显式联接相同的计划。(请注意,逗号连接并没有停止成为ANSI SQL,只是ANSI-92是显式语法首次出现的地方。)
除了在Oracle vs SQL Server中如何定义表之外,在Oracle或SQL Server中,一种连接形式是否比另一种更好
就服务器而言,没有
如果包括更多的表,比如3或4,会怎么样?假设查询被构造为返回一个等价的记录集,那么这会改变性能特征吗
这是可能的。对于逗号连接,我不确定是否可以像显式连接那样使用括号控制连接顺序:
SELECT *
FROM Table1 t1
INNER JOIN (
Table2 t2
INNER JOIN Table3 t3
t2.id = t3.id)
ON t1.id = t2.id
这可能会影响整体查询性能(无论好坏)。我不确定如何使用逗号连接实现相同级别的控制,但我从未完全学习过逗号连接语法。我不知道你是否能说table1t1,(table2t2,table3t3)
,但我不相信你能。我认为您必须使用子查询来实现这一点
显式联接的主要优点是:
table1t1、table2t2、table3t3
,然后必须深入WHERE子句以确定其中一个连接是否是外部连接。这还意味着WHERE子句中没有填充所有这些连接条件,您知道在修改查询时不关心更改这些条件+
和*=
以正确进行外部联接SELECT *
FROM Table1 t1
INNER JOIN (
Table2 t2
INNER JOIN Table3 t3
t2.id = t3.id)
ON t1.id = t2.id