毎日温泉に入りたい♨︎

-見た物,買った物,体験談を書いてますヽ(* ॑꒳ ॑* )ノダァーッ!!-

DISTINCTを使わないで重複を排除する

唐突にそれた話

SQLのDISTINCTはソートがあるので処理が重いという説があり、EXISTSとかGROUP BYで代用する方が良いと伺った…

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

 

個人的にはDISTINCTを使うほうが見た時に意味が通ってる気がするので可読的に好きです、しかし昨今データ量の多いシステムが増えているので少しでも不安の種は潰しておきたい

基本的にGROUP BY使えば終わりですが

適当にEXISTSでの代替ソース書くとこんな感じです

SELECT a._cd, a._name FROM dev_table1.a
WHERE EXISTS ( SELECT dev_sub FROM dev_table2.b WHERE a._cd = b._cd)

正直サブクエリはオプティマイザ理解しないで適当に作ると重くなるので嫌いです(笑)

 

GROUP BY句はこれはこれで余分なディスクIOが発生したりディスク領域利用したり懸念するところが出てくるとか何とか…

次から次に問題の種が沸いて出てめんどくさい

SQLは使ってるDBのバージョンによってオプティマイザの見解とか眉唾が結構あるので、一々間に受けていたらきりがない。

ある程度のレスポンス気にした書き方にしたら実装後にサイジングとか負荷試験をキチンと行って、その環境のベストエフォートを探すのが近道

 

実は...

今回はレスポンスとかが問題じゃなくて、使ってた製品がWHERE以下しかSQLを記述することが出来なくてDISTINCTの代わりを探していただけでした(*^-^)ノ