ちゃんとSQLは書こうよ

そもそも、Oracleについての知識はこれっぽっちもないのだけど、今回のプロジェクトで知らないことを色々教えてもらっている。常識なのかもしりませんが(^^;;

ルールベースの場合

FROMの検索順

FROMで指定するテーブル名は後に指定したものから適用される。
「A」「B」「C」のテーブルがありそれぞれでIDというカラムがあるとして、
SELECT a.A, b.B, c.C FROM A, B, C WHERE A.id = B.id = C.id
を実行すると、
C→B→A
の順で検索が実行される。

インデックスの適用順

インデックスはWHEREで指定した順番に適用される。幾つIndexを張っていても、利用されるものは1つなので注意する。

「A」「B」「C」のテーブルがありそれぞれでIDというカラムがあるとして、
「A」「B」「A+B」のインデックスが張られているとする。


SELECT a.A, b.B, c.C FROM A, B, C WHERE A.id=1 AND B.id=1 AND C.id=1
を実行すると、A+Bのインデックスが適用される


SELECT a.A, b.B, c.C FROM A, B, C WHERE A.id=1 AND C.id=1 AND B.id=1
を実行すると、Aのインデックスが適用される


SELECT a.A, b.B, c.C FROM A, B, C WHERE B.id=1 AND A.id=1 AND C.id=1
を実行すると、Bのインデックスが適用される


SELECT a.A, b.B, c.C FROM A, B, C WHERE C.id=1 AND B.id=1 AND A.id=1
を実行すると、Cを全走査してからBのインデックスが適用される


あぅぅぅぅ、、、しらんかったorz
はずかしーーーー


実行計画のとり方とかもよく知らんかった。
このへんも参考になりそう。