0

为了加快某些查询,我将一个大表拆分为两个表(一个具有固定行格式,另一个具有动态行格式),每个表共享相同的主键和相同的总行数,但包含不同的列。

一些查询需要来自两个表的信息。要在一个查询中获取所需的数据,我可以选择执行以下操作:

SELECT A.col2, B.col3 FROM A INNER JOIN B ON A.col1=B.col1 WHERE A.col1=?

SELECT A.col2, B.col3 FROM A INNER JOIN B USING (col1) WHERE A.col1=?

SELECT A.col2, B.col3 FROM A, B WHERE A.col1=? AND B.col1=?

从 EXPLAIN SELECT 语句中,我看不出任何差异。我想要一些建议是否真的如此。

4

1 回答 1

0

前两个查询中使用的语法首先出现在 ANSI SQL-92 标准(文本链接)中:

 <join specification> ::=
                <join condition>
              | <named columns join>

 <join condition> ::= ON <search condition>
 <named columns join> ::= USING <left paren> <join column list> <right paren>

基本上,USING (col1)意思与 相同ON a.col1 = b.col1

您的第三个查询,如果更新为...

SELECT A.col2, B.col3 
  FROM A, B 
 WHERE A.col1 = B.col1 AND A.col1=? AND B.col1=?

... 是 'old-school' JOIN 的示例,因为该语法在 ANSI SQL-92 之前使用。

说了这么多,所有三个查询都应该被解析为等效的。

于 2012-09-28T10:41:35.270 回答