2011-01-04 8 views
5

一般に、FROM句のテーブルの配置や順序は、クエリのパフォーマンスを向上させるのに何か変わるのでしょうか?アレンジメントでは、私は最小のテーブルと最大のテーブルを意味します。FROM句のテーブルの並び順は、パフォーマンスの改善に何か影響を与えますか?

さまざまな経験、アイデア、意見、考え方にも感謝しています。

私の場合は、PostgreSQL v8.2.3を使用しています。

+2

Offtopic:バージョン8.2.3は、ほぼ4歳と16リリースです。いくつかのメンテナンスが必要です。 8.2.19へのアップデートは大したことではありません。 –

答えて

4

が、それは任意の計画は可能な限り多くの異なる順序で参加することが生成されますオプティマイザをdifference-作るべきではありません(から句でテーブルをgeqo_thresholdまで)。

外部結合は対称ではないため、ステートメントの順序は重要です(ただし、実際の実行順序はサーバーによって決まります)。

+0

私は同意します。 PostgreSQLプランナーは、統計に基づいてテーブルの正しい「順序」を選択するのに十分なほどスマートです。外部結合の場合は、もちろん違いがあります(しかし、結果にも違いがあります) –

+1

クエリ計画で 'geqo(Genetic Query Optimizer) 'の存在を知らせてくれてありがとう。 – Gnanam

2

「SELECT FROM table1、table2」のようなものを使用していますか? テーブルは「暗黙的に」クロスジョインされているので、重要ではないと思います。

まず、EXPLAINを使用して2つの可能なクエリをテストし、違いがあるかどうかを確認します。

0

(むしろ特定のPostgreより一般的なSQLのアドバイス、)

それはは違いを作るべきではありません - オプティマイザはそれに利用できる持っている、とSQLは一般的になっている情報に基づいて計画を構築する必要がありますオプティマイザは、結果が同じであれば、結合、条件チェックなどを自由に並べ替えることができるように設計されています。

特定のオプティマイザ(特定のDB、サーバー状態、製品バージョンなど)に特定のクエリが問題を引き起こすことがありますが、このような状況に遭遇することはまれであることがあります。

インナーが参加するため
0

FROM foo, bar, bazと書いても違いがありません。 FROM foo JOIN bar ... JOIN baz ...(内側の結合)を書くと、join_collapse_limitよりも小さい要素があれば差は出ません。それ以外の場合、結合順序は固定されています。これを使用すると、手動で最適化することができます(ただし、ほとんど必要ありません)。外部結合の場合、結合順序は書かれているとおりに固定されます。結合順序は結果に影響するためです。

関連する問題