使用,打开或在何处组合两个查询

时间:2012-09-28 10:26:22

标签: mysql select join

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

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

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语句中,我看不出任何差异。我想知道是否真的如此。

1 个答案:

答案 0 :(得分:0)

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

 <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之前使用。

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