DISTINCTはコストが高い
SQLのDISTINCTはコストが高いらしい。
仕事場でいろいろと教えてもらいながらやっている中で、DISTINCTは最終手段だよ。と教えてもらった。
DISTINCTはJOINの書き方で対処ができるはず。らしい。
そういうものかといま意識してどうすればいいか考えているところです。
DISTINCTの代りにEXISTSを使う
SELECT文にDISTINCT*Aを指定すると処理に非常に時間がかかります。DISTINCTを使用するのは極力避けましょう。DISTINCTと同等の結果を得ることのできるSQL文にEXISTSがあります。例えば, SELECT DISTINCT a.ID1, a.NAME1 FROM TABLE1 a, TABLE2 b WHERE a.ID1 = b.ID2 のSQL文は,副問い合わせの条件としてEXISTSを指定して SELECT a.ID1, a.NAME1 FROM TABLE1 a WHERE EXISTS ( SELECT 'X' FROM TABLE2 b WHERE a.ID1 = b.ID2) と書き換えることができます。同様に,NOT INからNOT EXISTSに代替することによってパフォーマンスが向上することもあるので,これも検討してみてください。
かなり納得。
INよりEXISTSでかなり早くなったことはあった。
DISTINCTをやめたSQLでやってみよう。