読者です 読者をやめる 読者になる 読者になる

kazu22002の技術覚書

技術屋として日々の内容を記録しているサイト。PHPやcordovaをやっています。

DISTINCTはコストが高い

SQL

SQLのDISTINCTはコストが高いらしい。

itpro.nikkeibp.co.jp

仕事場でいろいろと教えてもらいながらやっている中で、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でやってみよう。

広告を非表示にする