0

テーブルのパーティション分割に関する記事をいくつか読んだことがありますが、それでもその使用法については少し混乱しています。私の場合は次のとおりです。

私は約1,000万のレコードを含む大きなテーブルTAを持っており、毎日30〜40Kのレコードがロードされています。

テーブルTAには、日付フィールドを含む多くの列が含まれ、もう1つの重要な列はvarcharであるproject#です。

これで、日付フィールドでテーブルTAを分割するオプションがあります。

しかし、私のクエリを主に見ると、1つの日付だけのデータをフェッチし、日付フィールドにインデックスが付けられているため、データのフェッチは大きな問題ではありません。

同様に、qryには「IN」句を含む「WHERE」条件にもproject#が含まれています。つまり、「IN」句を介した入力としてN個のproject#を指定する必要があります。

次に、どのように進めればよいかを提案してください。

4

2 に答える 2

2

常に完全な日次データを読み取る場合は、次のようにします。

ステップ0)日付にグローバルインデックスを削除します。パーティションでは必要ありません。

ステップ1)毎日のパーティションを作成する

ステップ2)プロジェクトにセカンダリパーティションのローカルインデックスを作成します

私があなたを誤解していて、あなたが毎日のパーティション全体を読まない場合は、その一部だけを読んでから、スキーマをそのままにしておきます。

于 2012-06-14T11:02:07.467 に答える
1

ta(upload_date、project#)にインデックスta_idxを作成します。1を圧縮します。

複数列の圧縮されたインデックスで十分な場合があります。upload_date行が追加されてもはあまり変化しないため、クラスタリング係数は非常に低いままです。また、繰り返される値が多い場合は、圧縮upload_dateすることで多くのスペースを節約できます。これはおそらく非常に効率的なインデックスになります。

確かに、パーティショニングを追加することで物事をより効率的にすることができますが、それは問題の価値がないかもしれません。パーティショニングは非常に便利ですが、非常に注意が必要な場合もあります。これがパーティショニングを使用する予定の唯一の場所である場合、私はそれを避けます。(これを、パーティション化についてさらに学ぶための言い訳として使用したい場合を除きます。)

于 2012-06-19T18:13:55.460 に答える