你好,我想知道哪种查询适合多个表。
例如:
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
哪种查询对性能最好?
它们应该完全相同。也许你想从MySQL手册中阅读相应的章节(只是关于语法,而不是关于性能)。
我希望所有这三个都被解析为完全相等,因此将执行相同的操作。后两个查询中的where
子句是冗余的。
许多开发人员更喜欢显式的ANSI-92语法(在后两个查询中使用),而不是第一个查询中的隐式语法——然而,这应该不会对性能产生影响。
正如已经指出的,所有形式的效率都是一样的。然而,它们在另一个非常重要的方面是不同的:可读性。
这就是为什么我更喜欢使用inner join
语法。这也是标准中普遍使用的符号。
join
只是inner join
的快捷方式,并且做from table1,table2 where
也与内部连接相同(参见mysql文档和mysql论坛)。它们都应该被mysql以同样的方式处理(第二个的解析时间可能会稍微低一点,但这可以忽略不计)。
至少你应该选择一个更可读的(和可维护的方式),这将是第二个(在我看来,有些人可能喜欢第一个)。