【今回の内容】
前回は基本的なSQLを備忘録で簡単にまとめていたけど、
http://forse.hatenablog.com/entry/2014/03/13/200356
その中に気になることがあったので調べたものをメモとして紹介します。
今の自分の現場では、
重複行を絞り込む時に、distinctとgroup by
を使う人それぞれいました。
distinctとgroup byは同じように重複行を消すという意味では
どちらでもいいのかなーと思っていたけど、
疑問に思ったので少し調べてみました。
【疑問】
distinctとgroup by は重複行を消す目的ならどちらを使ってもよいのか?
【結論】
結果としてはどちらも重複行を消すという意味では同じらしい。
だが、一般的にgroup byは
集合関数(sumとかcountとか)と一緒に使う
ので、そもそもの目的用途が違うのではという話があった。
また、どちらが性能が良いかという事に関しては
賛否両論ある様子。
■distinct>group by
なし
■そもそもDISTINCTやgrop byの代りにEXISTSを使う
http://itpro.nikkeibp.co.jp/article/COLUMN/20060111/227105/
http://oracle.se-free.com/tuning/B1_sql3.html
個人的には、そもそもDISTINCTやgrop byの代わりにEXISTSを使う
という意見がおもしろかった。
手早く目的のデータを取得したいときは、手段は問わない(どれを使ってもいい)けど
性能改善やチューニングを行う際は、こういった知識が必要なのかなと言う意味で。