新卒から文系エンジニア→人材業界に転職した人のブログ

新卒から文系エンジニア→人材業界に転職。技術・スキルがないためブログを通して勉強。その後、IT業界の業界知識が活かせる人材業界へ。異業種×異職種の転職経験有り。

【SQL入門】group by,distinctどちらが性能がよいのか

【今回の内容】


前回は基本的なSQLを備忘録で簡単にまとめていたけど、


【SQL入門】基本的なSQLを目的別にまとめてみた - FOR SE




その中に気になることがあったので調べたものをメモとして紹介します。



今の自分の現場では、重複行を絞り込む時に、「distinct」と「group by」を使う人それぞれいました。



distinctとgroup byは同じように重複行を消すという意味では

どちらでもいいのかなーと思っていたけど、

疑問に思ったので少し調べてみました。


【疑問】distinctとgroup by は重複行を消す目的ならどちらを使ってもよいのか?

【結論】 結果としてはどちらも重複行を消すという意味では同じらしい。

だが、一般的にgroup byは集合関数(sumとかcountとか)と一緒に使うので、

そもそもの目的用途が違うのではという話があった。


また、どちらが性能が良いかという事に関しては、賛否両論ある様子。


   

â– distinct>group byæ´¾

   
   なし
   

â– group by>distinctæ´¾


「distinctではソートの処理があり効率が悪い」という主張

[ThinkIT] 第8回:GROUP BYを使用したチューニング (1/2)


爆裂!C#野郎: DISTINCT と GROUP BY

   

■どちらでもない派


group byとdistinct:晶紀の館 第2別館:So-netブログ


■distinctやgroup byの代りにEXISTSを使う派

基礎から理解するデータベースのしくみ(5) | 日経 xTECH(クロステック)


ORACLE/オラクルSQLリファレンス(チューニング)



個人的には、そもそもDISTINCTやgrop byの代わりにEXISTSを使うという意見がおもしろかった。

手早く目的のデータを取得したいときは、手段は問わない(どれを使ってもいい)けど、

性能改善やチューニングを行う際は、こういった知識が必要なのかなと言う意味で。



こんな入門者向けのブログを書いている人がどんな人物で、どんな人生を歩んでいるのか、もし興味があれば読んでいっていただけると幸いです。

☆入社半年の時☆
文系SE(システムエンジニア)の実態―配属後4カ月で思うこと― - FOR SE


☆入社3年目の時☆
文系SE(システムエンジニア)の実態―三年目で思うこと― - FOR SE


☆英語も勉強してました!

【英語】文系SEが、TOEIC350点付近⇒TOEIC850になった話 - FOR SE


☆これから転職を考えている人向け☆

【整理】異業界異職種への退職エントリー(SEから営業へ) - FOR SE


【必読】転職を考えたときにすること 〜IT業界向けの人材紹介会社エージェントが語る〜 - FOR SE

.hatena-module:nth-of-type(10) { background: transparent; } .hatena-module:nth-of-type(10) .hatena-module-title{ display: none; } .hatena-module:nth-of-type(10) .hatena-module-body { padding: 0; }