哪种方法对大型表有更好的性能?

时间:2009-04-27 15:14:10

标签: sql performance

让A和B成为数据库模式中的两个表。 A和B通过多对一关系相关联。每个A存在许多B,并且B具有外键列a_id。两个表都有一个主键列id。

以下哪两个查询对A和B中的大型数据集执行效果更好?

SELECT A.* FROM A,B WHERE A.id = B.a_id

SELECT A.* FROM A INNER JOIN B ON A.id = B.a_id

或者它们是否相同?

4 个答案:

答案 0 :(得分:5)

它们相当于所有4主要数据库系统:OracleSQL ServerMySQLPostgreSQL

使用JOIN语法(更确切地说,使用STRAIGHT_JOIN代替JOIN)将有助于在MySQL中强制执行您需要的加入顺序。

有关详细信息,请参阅此答案:

使用JOIN语法时,通常也认为它更干净,更易读。

虽然我在Oracle代码示例上长大,但通常使用WHERE语法。

答案 1 :(得分:1)

我同意其他答案,即性能明智的两个陈述在主要系统上是等价的,但我也会认为从代码可读性的角度来看,第二个陈述更可取。我还要说,指定列列表而不是使用星号会提高性能和可读性。

答案 2 :(得分:0)

根据我的理解,它们都是一样的。理论上,我认为INNER JOIN可以由引擎优化,因为A,B的默认行为是笛卡尔连接。话虽这么说,我现在正在处理一个体面的大小表,并且在SQL Server 2005中都给出了相同的查询时间,所以我的猜测是引擎足够聪明,可以选择它。

干杯,
埃里克

答案 3 :(得分:0)

他们是等同的。但第二种形式是首选语法。