2012年5月21日月曜日

cross join

いままで、cross joinなんて何のためにあるのかと思っていました。
しかし、その威力に驚いた。 (半年前の気持ち)


inner joinってのは、cross joinの特例であるということ。

普通は、idでjoin して、正規化されたテーブルをくっつけていく。
これはこれで、全うな、意味のある結果を取り出せる。

たとえば、日付ごとのデータがある場合、日付でcross joinした物をサブクエリで
利用すると、日付ごとの累積データが出せたり、特定の日付までの最大値が
出せたりと、かなり使える。

join の後に、onを付けなければ、世界が広がる。
(いや、corss joinも条件を付けなきゃただの直積でおわる)

ただし、PostgreSQLでは、結構なパフォーマンスで使えるが、
MySQLでは、あるレコード数になると、極端に遅くなる。

インデックスのせいなのか、joinのパフォーマンスが悪いのか?
自力では特定できず、あきらめた。
MySQLもそこそこ自信があったけど、ダメだった。

よくわからない、エントリーでどうしようもないので、とりあえず終わり。