让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
或者它们是否相同?
答案 0 :(得分:5)
它们相当于所有4
主要数据库系统:Oracle
,SQL Server
,MySQL
,PostgreSQL
。
使用JOIN
语法(更确切地说,使用STRAIGHT_JOIN
代替JOIN
)将有助于在MySQL
中强制执行您需要的加入顺序。
有关详细信息,请参阅此答案:
使用JOIN
语法时,通常也认为它更干净,更易读。
虽然我在Oracle
代码示例上长大,但通常使用WHERE
语法。
答案 1 :(得分:1)
我同意其他答案,即性能明智的两个陈述在主要系统上是等价的,但我也会认为从代码可读性的角度来看,第二个陈述更可取。我还要说,指定列列表而不是使用星号会提高性能和可读性。
答案 2 :(得分:0)
根据我的理解,它们都是一样的。理论上,我认为INNER JOIN可以由引擎优化,因为A,B的默认行为是笛卡尔连接。话虽这么说,我现在正在处理一个体面的大小表,并且在SQL Server 2005中都给出了相同的查询时间,所以我的猜测是引擎足够聪明,可以选择它。
干杯,
埃里克
答案 3 :(得分:0)
他们是等同的。但第二种形式是首选语法。