2

嗨,我想知道哪种查询适用于多个表。

例如:

select table1.id, table1.name from table1,table2,table3 
where table1.id=table2.id and table2.id=table3.id

或者

select table1.id, table1.name  
from table1 
inner join table2 on table1.id=table2.id 
inner join table3 on table2.id=table3.id 
where 1

或者

select table1.id, table1.name 
from table1 
join table2 on table1.id=table2.id 
join table3 on table2.id=table3.id 
where 1

哪种查询最适合性能?

4

4 回答 4

5

它们应该完全相同。可能您可能想阅读 MySQL 手册中的相应部分(然而,这只是关于语法,而不是关于性能)。

于 2011-10-07T10:55:31.233 回答
4

我希望所有这 3 个都被解析为完全相同,因此将执行相同的操作。后两个查询中的where子句是多余的。

许多开发人员更喜欢显式的 ANSI-92 语法(在后两个查询中使用)而不是第一个查询中的隐式语法 - 但是,这对性能没有影响。

于 2011-10-07T10:55:44.917 回答
1

正如已经指出的那样,所有形式在效率方面都是相同的。然而,它们在一个非常重要的方面是不同的:可读性。

这就是为什么我更喜欢使用inner join语法。这也是标准中流行的符号。

您可能会发现这个问题的答案很有用:SQL Inner Join syntax

于 2011-10-07T11:01:59.920 回答
0

join只是一个快捷方式inner join,做from table1,table2 where与内部连接相同(参见 mysql 文档mysql 论坛)。mysql应该以同样的方式对待它们(第二个的解析时间可能会稍微低一点,但可以忽略不计)。

至少你应该选择一个更受欢迎(并且可以这样维护)的那个,这将是第二个(在我看来,有些人可能会喜欢第一个)。

于 2011-10-07T10:59:31.123 回答