web-dev-qa-db-ja.com

INNER JOINはEXISTSよりも優れたパフォーマンスを提供できますか

私は一連の手順でパフォーマンスを改善することを調査してきましたが、最近、同僚がEXISTSの代わりにINNER JOINを使用するとパフォーマンスが大幅に向上したと述べました。

これがなぜなのかに関する調査の一環として、私はここで質問をするだろうと思いました。

そう:

  • INNER JOINはEXISTSよりも優れたパフォーマンスを提供できますか?
  • これはどのような状況になりますか?
  • テストケースを証拠として設定するにはどうすればよいですか?
  • 詳細なドキュメントへの便利なリンクはありますか?

そして、本当に、他のどんな経験も人々がこの質問に耐えるためにもたらすことができます。

他の可能なパフォーマンスの改善を示唆することなく、答えがこの質問に具体的に対処できれば幸いです。すでにかなりの成功を収めており、私はこの1つの項目に興味がありました。

どんな助けでも大歓迎です。

54
James Wiseman

一般的に、INNER JOINEXISTSは異なるものです。

前者は両方のテーブルから重複と列を返し、後者は1つのレコードを返し、述語であるため、1つのテーブルのみからレコードを返します。

UNIQUE列で内部結合を行うと、それらは同じパフォーマンスを示します。

(重複を取り除くために)DISTINCTが適用されたレコードセットで内部結合を行う場合、EXISTSは通常より高速です。

INおよびEXISTS句(等結合相関)は通常、いくつかのSEMI JOINアルゴリズムは、通常、いずれかのテーブルのDISTINCTよりも効率的です。

私のブログでこの記事を参照してください。

54
Quassnoi

多分そうでないかもしれません。

  • 同じプランが生成される可能性が最も高い
  • INNER JOINは、同じ出力を得るためにDISTINCTを必要とする場合があります
  • EXISTSはNULLを扱います
11
gbn