いままで、cross joinなんて何のためにあるのかと思っていました。
しかし、その威力に驚いた。 (半年前の気持ち)
inner joinってのは、cross joinの特例であるということ。
普通は、idでjoin して、正規化されたテーブルをくっつけていく。
これはこれで、全うな、意味のある結果を取り出せる。
たとえば、日付ごとのデータがある場合、日付でcross joinした物をサブクエリで
利用すると、日付ごとの累積データが出せたり、特定の日付までの最大値が
出せたりと、かなり使える。
join の後に、onを付けなければ、世界が広がる。
(いや、corss joinも条件を付けなきゃただの直積でおわる)
ただし、PostgreSQLでは、結構なパフォーマンスで使えるが、
MySQLでは、あるレコード数になると、極端に遅くなる。
インデックスのせいなのか、joinのパフォーマンスが悪いのか?
自力では特定できず、あきらめた。
MySQLもそこそこ自信があったけど、ダメだった。
よくわからない、エントリーでどうしようもないので、とりあえず終わり。
0 件のコメント:
コメントを投稿