2009-03-18 9 views

答えて

2

RDBMSによって異なります。両方のクエリの実行計画を比較する必要があります。

Oracle 10および11での私の経験では、実行計画は常に同じです。

2

理論的には、すべてのサブクエリを結合クエリに変更できます。

+0

相関サブクエリについても同様ですか?なぜあなたは「理論的に」資格を与えられますか?あなたはその質問に対する答えを完了できますか? – dkretz

3

パフォーマンス面では、最新のDBエンジンでは違いはありません。

3

サブクエリの問題は、サブクエリセットがキーなしで終了する可能性があるため、それらのサブスクリプションを結合する方がコストがかかることです。

可能であれば、常にJOINクエリを作成し、WHEREではなくON句でフィルタリングしてください(ただし、現代のエンジンはこれに最適化されていますが同じである必要があります)。

2

多くのものと同様に、それは異なります。 - サブクエリの複雑さはどのくらいですか?クエリ内でサブクエリの実行頻度はどのくらいですか

可能な限り、サブクエリは避けるようにしています。特に、結果セットの各項目に対してサブクエリが実行される場合、大きな結果セットがサブクエリを使用しないことを期待する場合

世話、SQL Serverでの アレックス

1

は、相関副問合せは、通常参加したり、パフォーマンスのために、多くの場合であっても良く、派生テーブルに参加するよりも悪い行います。私は、何度も何度も実行される必要のあるサブクエリを書くことはほとんどありません。相関サブクエリは、基本的にクエリをカーソルに変換し、一度に1つの行を実行することが多いためです。データベースでは、通常、セットベースの方法で作業を行う方が良いです。

2

「早すぎる最適化がすべての悪の根源」と認識している場合は、今のところパフォーマンスの影響を無視してみましょう。

もっと明確に見えるものを選択してください。

5

最初の原則は「クエリを正確に記述する」ことです。第2の原則は、「問合せを簡単かつ明示的に述べる」(通常は選択肢を選択する)です。 3番目は「クエリを効率的に処理できるようにする」ことです。

優れたクエリプロセッサを備えたdbmsの場合、同等のクエリ設計では、同じ(または少なくとも同等に効率的な)クエリプランが生成されるはずです。

初めてMySQLを使用したときの私の最大の不満は、オプティマイザを予期することがどれほど意識されていたかということでした。 Oracle、SQL Server、Informix、およびその他のdbms製品の長い経験の後、私はそのような問題に心配することはめったにありませんでした。新しいバージョンのMySQLではより良いことですが、まだ他のものよりも注意を払う必要があります。

関連する問題