2009-08-31 12 views
8

多くの場合、クエリの対象となる数値列を分割することによるパフォーマンス上のメリットがあるかどうかを調べることに興味があります。現在、私は約5,000万レコードを含むマテリアライズド・ビューを持っています。通常のBツリーインデックスを使用してこの数値列で検索すると、コストは7、クエリの結果は約0.8秒(非プライムキャッシュ)になります。その列にグローバル・ハッシュ・パーティション(64パーティションあり)を追加した後、コストは6になり、クエリ結果は約0.2秒になります(再びプライム・キャッシュなし)。グローバルにパーティション化されたインデックスは、パーティション化されていないインデックスよりも優れていますか(高速)ですか?

最初の反応は、分割されたインデックスがクエリのパフォーマンスを向上させたことです。しかし、これはちょうど偶然の可能性があり、検索されている値や気づいていない値に完全に依存する可能性があることを認識しています。だから私の質問です:大規模なテーブルの数値列にグローバルハッシュパーティションを追加することでパフォーマンス上のメリットがあるのか​​、スキャンするインデックスパーティションを決定するコストです。非インデックスパーティション?

これは、多くのOracleの質問と同様に、「これは依存している」と回答できると確信しています。私は各アプローチの利点を判断するためにどのような要素を考慮すべきかを学ぶことに興味があります。

ありがとうございます!

答えて

4

私はあなたの研究でこの参考文献を見つけたと確信しています - Partitioned Tables and Indexes。しかし、誰かが興味を持っているなら、私はそれにリンクを張ります。これはパーティショニングに関する非常に良い資料です。

ストレート・ツー・ポイント - パーティション・インデックスは、索引を断片(自分の状況では16)に分解し、ハッシュ・パーティション化キーに応じてデータを拡散します。これを使用する場合、Oracleはキーのハッシュを「計算」し、検索を続行するセクションを決定します。

インデックス検索の仕組みを知っていると、本当に巨大なデータでは、横断するインデックスツリーを減らすためにパーティションインデックスを選択する方が良いと思います(通常のインデックス)。それは実際にテーブルにあるデータ(正規のインデックスツリーがどのように構成されているか)に依存し、ハッシュであり、開始ノードから通常のツリートラバースよりも速く下位ノードに直接ジャンプします。

最後に、テスト結果の信頼性を高める必要があります。 1つの手法が他の手法よりも正確なデータに対して優れた結果をもたらす場合、それを実装する心配はありません。

関連する問題