SQLチューニング基礎3 
2008/11/17 月曜日 15:41:43
こんにちわ!かーつんです!!
不定期更新SQLチューニング基礎3発目です。
ん~と、今回は「union (時と場合でminus)」です。
2つのテーブルの集計結果など、同時に取ってきたいとき。
まぁ、方法としては3種類。
1.2回クエリを投げて、PGで加工する。
2.副問い合わせでSQL内で加工する。
3.クエリ的には1回でunionで結果のみがっちゃんこ。
コスト的には、1<3<2の順で高くなるって感じでしょうか。
副問い合わせは使い方にも依りますが、mysqlで使うには少々気が咎める時がありますよね。
でも、どうしても2回クエリを投げれない(投げたくない)。ときってあると思うんです。
そんなとき、同じSQLを2回書いて、unionでくっつけて、結果にしてしまう。
こんな事をたまに思いつきます。
ただ、本来のunionの使い方は、結果の合成なので、
同じフィールド名を持つ違うテーブルの値を合算させてしまうのが定石なのですが、
あ え て、同じフィールド名をもつ違うテーブルの値に別名つけて別レコードとして、
同時に取得する。
まぁ、どういうことかというと、
SELECT COUNT(hoge) FROM exampleA; SELECT COUNT(hoge) FROM exampleB;
というのを、
SELECT COUNT(hoge) AS hogeA FROM exampleA; UNION SELECT COUNT(hoge) AS hogeB FROM exampleB;
てな具合にかいて、
結果を
hogeA hogeB
100 200
という具合に取得するわけです。
PG内での加工は通常の結果より面倒ですが、
1度に取らなきゃいけないときに、1度で取れるのがメリットです。
なんかまぁ、基礎というより裏技っぽくなっちゃいましたが、
こんな事も出来ますよ。ってくらいで、知ってて損はないはずです。
あと、MySQLでは使えないのですが、
「MINUS」についても同じような使い方をすることが出来るときがあるので、
いろいろ工夫してみてください。
いじょ。かーつんがお送りしました。