0

特定のクエリを高速化するために、大きなテーブルを 2 つのテーブル (1 つは固定行形式、もう 1 つは動的行形式) に分割しました。それぞれが同じ主キーと同じ合計行数を共有しますが、含まれる列は異なります。

一部のクエリでは、両方のテーブルからの情報が必要です。1 つのクエリで必要なデータを取得するには、次のオプションがあります。

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

最初の 2 つのクエリで使用される構文は、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です。

次のように更新された場合、3番目のクエリ...

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

... は、ANSI SQL-92 より前の構文で使用されていた「昔ながらの」JOIN の例です。

とはいえ、3 つのクエリはすべて同等のものとして解析する必要があります。

于 2012-09-28T10:41:35.270 に答える