毎日温泉に入りたい♨︎

見た物や買った物、投資についてを書いてますヽ(* ॑꒳ ॑* )ノダァーッ!!

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)

正直サブクエリの実行順位はオプティマイザ理解しないで適当に作ると重くなるのでう〜ん(笑)

SQL 副問合せのサンプル(サブクエリ) |

 

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

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

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

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

 

実は...

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

もっと冴えた方法もあるかなと

bitFlyer ビットコインを始めるなら安心・安全な取引所で