- - PR -
WHERE句の右辺と左辺
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-12-16 09:43
お世話になります。
例えば、テーブルAには10件、テーブルBには1000000件のレコードがある場合 SELECT * FROM A,B WHERE A.CODE_1=B.CODE_1 AND A.CODE_2=B.CODE_2 AND A.CODE_3=B.CODE_3 と SELECT * FROM A,B WHERE B.CODE_1=A.CODE_1 AND B.CODE_2=A.CODE_2 AND B.CODE_3=A.CODE_3 では実行時間に差はでるのでしょうか? | ||||
|
投稿日時: 2004-12-16 10:09
私の使用しているデータベース製品 X では、実行時間に差はありません。(明示的に指定しない限り同じ実行プランになります。)
| ||||
|
投稿日時: 2004-12-16 10:12
WHERE句では違いは無いと思います。
FROM句にはデータ件数が多いテーブルから記述していくと良かったと記憶してます。 理由については...時間が出来たら調べてきますです。 | ||||
|
投稿日時: 2004-12-16 12:23
RDBMSにもよりますが、通常はFROM句の順番で実行プランが変わることはありません。 Sybase ASEやSQLServerでは、set forceplan onでFROM句の順番で絞込みを行うように 実行プランを強制することができますが、デフォルトではFROM句の順番には影響されません。 | ||||
|
投稿日時: 2004-12-16 13:02
FROM 句や WHERE 句の順番で実行計画が変化するのは Oracle のルールベースオプティマイザを使用したときだけだと思います (ヒントを使用した場合を除く)。
最近は Oracle でも他のデータベースと同様、コストベースオプティマイザのみのサポート (10g) となっているので、FROM 句は WHERE 句の順番も実行計画に影響を与えないでしょう。 ただ、例え Oracle のルールベースオプティマイザであっても、等号の左辺と右辺の入れ替えは実行計画には影響しないと思います。 | ||||
|
投稿日時: 2004-12-16 14:31
正確には、 Oracleではオプティマイザモードに関わらず、FROM 句や WHERE 句の順番で実行計画が 変化することはありません(複数の候補が同一順位だったり同一コストの場合を除く)。 です。 マニュアルのオプティマイザの説明のところに明記されています。 | ||||
|
投稿日時: 2004-12-16 14:50
SQLチューニングの必須知識を総ざらい(後編)という @IT の記事に FROM句の指定順番が後ろの表が外部表となります。 という記述がありました。
Oracle を使わなくなって久しい私には、どちらが正しいのか判断できませんが、とりあえず。 | ||||
|
投稿日時: 2004-12-16 15:01
該当の記事は、カーニーさんの投稿の「(複数の候補が同一順位だったり同一コストの場合を 除く)」に当てはまると思うので、どちらも正しいのではないかと。 #コストベースでまったくコストが同じ、と判断される場合はめったにないでしょうけど | ||||
