DISTINCTを高速化するにはEXISTSを使う

2016/07/20

big_tableに記録されているmaster_idの一覧を表示する場合、単純にマスタと結合してDISTINCTをつけると、big_tableのフルスキャンが実行される。

高速化のためには、fromに指定するのはmaster_tableのみにして、EXISTSを使う。
さらにbig_table.master_idにINDEXを付与する。

EXISTSを使用することでbig_tableの中で各master_idが一件でも見つかれば処理が終了することに加え、INDEXを使用してmaster_idを検索するため、高速化が見込める。
where句にbig_tableのmaster_id以外の条件(cond_a)が加わる場合、master_idのINDEXの代わりにmaster_idとcond_aの複合INDEXを作成することも考える。

-SQL
-