从MySQL中的多个表中进行选择时,以下两个查询都返回相同的结果集。
这些查询中的一个更好还是比另一个更有效?从我对一个小数据集的测试(每个表中约2k行),它们都在相同的执行时间内返回相同的结果集。
查询1:
SELECT
*
FROM
products,
product_meta,
sales_rights
WHERE
(
products.id = product_meta.product_id
AND products.id = sales_rights.product_id
)
AND (...)
LIMIT 0,10;
查询2:
SELECT
*
FROM
products
INNER JOIN product_meta ON products.id = product_meta.product_id
JOIN sales_rights ON product_meta.product_id = sales_rights.product_id
WHERE
(...)
LIMIT 0,10;
答案 0 :(得分:25)
它们是相同的,但语法不同。因此,您不应期望两种语法之间存在任何性能差异。但是,建议使用最后一种语法(ANS SQL-92语法),有关详细信息,请参阅以下内容:
答案 1 :(得分:1)
我认为this thread给出了很好的解释。
INNER JOIN是您应该使用的ANSI语法。
通常认为它更具可读性,尤其是在您加入时 很多桌子。
每当需要时,也可以使用OUTER JOIN轻松替换它 就产生了。
WHERE语法是面向关系模型的更多。
两个表的结果JOIN'ed是表格的笛卡尔积 应用哪个过滤器,仅选择那些具有连接的行 列匹配。
使用WHERE语法更容易看到这一点。
至于你的例子,在MySQL(以及一般的SQL)中这两个查询 是同义词。
另请注意,MySQL也有一个STRAIGHT_JOIN子句。
使用此子句,您可以控制JOIN顺序:哪个表是 在外环中扫描,哪一个在内环中。
你无法使用WHERE语法在MySQL中控制它。