Oracleの結合方法

Posted at 06/04/25 Comment(8)» Trackback(0)»

ちょいと不思議なこと(?)がありまして・・・

Oracleも9だか10だかから、LEFT JOIN〜とかINNER JOIN〜とかいう標準の書き方ができるようになりました。
というわけで、その方法でSQLを書いてました。
(もともとPostgreSQLを使ってたのでOracle独自の(+)使った書き方に慣れてないのもありまして・・・)

んで、その方法でViewを作ってたんですよ。

create view view1 as
select
  *
from
  table1 t1
left join
  table2 t2
on
  t1.id=t2.id

みたいな感じで。

で、このViewを使っていろんなselect文とかを作ってました。
そうしたらとあるSQLで、投げたら返ってくるのに10分くらいかかるSQLが出てきちゃいまして。
性能改善のために、Viewでやってた結合方法をOracle独自の方法に書き直しました。

create view view1 as
select
  *
from
  table1 t1,
  table2 t2
where
  t1.id(+)=t2.id

こんな感じに。
そしたらなんと、一気に応答時間が3秒くらいまで短縮してしまいました。
Viewを変えただけなので、発行しているSQL文には全く手を加えてません。
それなのに10分→3秒という極端な性能改善・・・ってどうなんでしょうね?

いや、改善されたんだからいいんですけど、上の結合方法でも下の結合方法でも、やっていることは同じなわけで、性能が変わってくるのは変なんじゃないかなぁ〜なんて思うわけですが・・・
Oracle内部では結局同じものとみなしてやってくれているのかと思いきや、そうじゃなかったってことですかね。
どうなんでしょ・・・

個人的には結合方法で性能がこんなに変わってくるなんて知らなかったんですが、有名な話なんでしょうかね?
詳しい人教えてぷりーず。
(ググれっていうツッコミは既に自分が自分に入れてるんで却下します)


"Oracleの結合方法"へのトラックバック

トラックバック先URL

"Oracleの結合方法"へのコメント

投稿者:バンブー    (06/04/26)

OracleMasterSilver9iを持っているので
こういった事はスラスラと答えられないといけないのですけど
分かりません(笑)

ただ結合に限らず単なるselect文でも
書き方を変えると性能が格段に上がるのはよくある事です。
だから同じ処理内容でもどうやって書くかが
腕の見せどころとなります。
などと答えられないのに口だけは一人前(笑)

勝手な想像としてはOracle独自の書き方だから得意だった?
・・・そんなわけないな(笑)
もしくは先に実行した10分かかった時の処理内容が
メモリに残っていた所為かもしれません。

そんな全く役に立たないコメントでした。

投稿者:人形師    (06/04/26)

いや〜、SELECT文を「書き換えて」性能が向上するってのはよくあることなんですけど、今回のは標準の書き方をOracle独自の書き方にしただけで、SQLの構造自体は変わってないんですよね。
外部結合していることに変わりはないわけですし。

全く同じ構造のSQLを書き方を変えただけでこんなにも変わっていいんだろうか、と思ったわけです。
多少違うくらいなら、まだ分かるんですけど。

実際のところ、独自の書き方のほうが今までの積み重ねもあるんでしょうし、最適化されてるってことだとは思うんですが、これって有名なことなのかな?と思って書いてみました。
OracleのLEFT JOINが遅いなんて常識だよ〜ってことだったりするのかな〜、なんて。

あと、とりあえずググってみたんですが、それらしい情報は手に入れられませんでした・・・

投稿者:匿名    (12/01/21)

潟�c���>散��c�с
t1.id(+)=t2.id
t1.id=t2.id(+)

投稿者:Stephan    (12/05/09)

Wow, your post makes mine look febele. More power to you!

投稿者:ポールスミス メンズ 財布    (13/10/24)

ポールスミス 楽天

投稿者:ugg born boots 6 pm    (13/11/04)

There's no denying the bob could be a genuinely cutting-edge haircut, but to perform it well will be to give it daily life through just a little a great deal more duration (? la Rose Byrne). Or, put on it somewhat more effective using a softer dress and more innovative makeup. You can find sufficient actresses trying to appear younger, so anybody beneath the age of thirty should really be participating in up their natural joie de vivre!..
[url=http://www.tomichwines.com/ugg-born-boots-6-pm.html]ugg born boots 6 pm[/url]

投稿者:エスエスケイ バッグ    (14/01/06)

Some genuinely excellent blog posts on this website , thankyou for contribution.
エスエスケイ バッグ

投稿者:ケイトスペード アウトレット    (14/01/20)

Hi there, I found your blog via Google even as searching for a comparable topic, your site came up, it seems to be good. I have bookmarked it in my google bookmarks.
ケイトスペード アウトレット

"Oracleの結合方法"へコメントを投稿

上の情報を保存する場合はチェック

管理人

月別アーカイブ

Powered by Movable Type

Template by MTテンプレートDB

Supported by Movable Type入門