1

いくつかのテーブルがあり、ほとんどのクエリはほんの数個の結合を使用します。つまり、ほとんどすべてのクエリが使用する2〜3個の結合のようなものがあります。テーブルが大きくなっている場合に、この一般的な結合を高速化する最も一般的な方法は何ですか?SQLServerまたはOracleを使用したいと思います。

4

3 に答える 3

2
  1. マテリアライズドビュー-オラクルはこれらをサポートしており、場合によっては特に便利です。書き込みではなく読み取りが多い場合:http: //docs.oracle.com/cd/B10501_01/server.920/a96520/mv.htm

  2. インデックス-クエリプランを分析/説明し、インデックスの追加が役立つかどうかを確認します。多くの場合、クエリごとに異なるインデックスを使用することで、速度を向上させることができます。特定のクエリに使用するインデックスをクエリパーサーに指示するためのヒントを提供することもできます。

  3. 非正規化-これらのテーブルのデータの一部を、データを取得するために結合するのではなく、関連するテーブルに格納します。

  4. キャッシング-クエリキャッシュのサイズを増やすか、アプリにキャッシングレイヤーを作成します。

于 2012-05-31T20:52:16.523 に答える
1

いくつかのオプション

  • 参加する列にインデックスを配置します
  • 必要なデータをカバーするようにインデックスを作成します
  • データを非正規化して、結合は必要ありません<=最大の勝利
  • SQLServerのインデックス付きビューまたはOracleのマテリアライズドビューを使用する
  • クエリオプティマイザが取得できる最高の統計を提供して、最適な結合戦略(ハッシュ/マージ/ループ)を使用するようにしてください。
于 2012-05-31T20:47:23.273 に答える
1

最も一般的な方法はインデックス作成ですが、より具体的にするための十分な情報を提供していません。

いくつかのシナリオを次に示します。

(1)ファクトテーブルなどの中央テーブルに接続された一連の参照テーブルがあります。

この場合、参照テーブルに自動インクリメントの主キーを定義する必要があります。これは自動的にインデックスとして機能します。

(2)クエリは非常に選択的です

この場合、where句のフィールドにインデックスを集中させる必要があります。これは、2番目のテーブルが非常に小さい場合に特に当てはまります。したがって、順次検索はインデックス検索に似ています。

(3)結合されたテーブルは実際にはパフォーマンスのボトルネックです

この場合、テーブルまたはインスタンス化されたビューのいずれかとして、結合の結果をインスタンス化することができます。これは、結合基準でデータ範囲を使用するなど、結合基準が複雑な場合に必要になる可能性があります。

(4)データのパーティション化など、他のオプションもあります。

于 2012-05-31T20:51:00.523 に答える