【发布时间】:2010-09-12 20:08:49
【问题描述】:
当我开始编写数据库查询时,我还不知道 JOIN 关键字,自然我只是扩展了我已经知道的内容并编写了如下查询:
SELECT a.someRow, b.someRow
FROM tableA AS a, tableB AS b
WHERE a.ID=b.ID AND b.ID= $someVar
现在我知道这与 INNER JOIN 相同,我在我的代码中找到了所有这些查询,并问自己是否应该重写它们。它们有什么异味吗?还是很好?
我的回答总结:这个查询没有任何问题,但是使用关键字很可能会使代码更具可读性/可维护性。
我的结论:我不会改变我的旧查询,但我会更正我的写作风格并在未来使用关键字。
【问题讨论】:
-
ANSI SQL 标准随时间而变化。表达外连接的能力早于 JOIN 子句语法的引入。连接语法顺便为索引和连接提示提供了机会。
-
你的总结是错误的,让你的结论很糟糕。查询的不同之处在于,下面的答案将在更小的数据子集上执行 where 子句。性能要好得多,因此您应该考虑在可能的情况下使用内部连接重写查询!
-
DanielSpiewak 接受的答案是错误的。他们幻想着实施。对 from 的非外部连接的优化,在 & where syntax 是微不足道的。 MySQL具体看官方文档rejoin optimization&其他方面的优化)。
-
逗号是交叉连接,优先级低于关键字连接。仅此而已。