2009-09-04 7 views
0

数日前、私は大量のデータを扱うことを可能にするためにパーティショニングを使い始めました。固定キーでパーティションのインデックスを作成する必要がありますか?

私は文書として示唆したようにマスターテーブルを作成し、マスターテーブルから継承したいくつかの子テーブルを作成し、各子テーブルの制約を追加して許容キー値を定義しました。制約だったような:

CHECK(SITE_ID =「google.com」)

が今ここに私の質問です:

私は以下の提案に出くわしたドキュメントを読むことながら:「パーティションごとに、作成キー列のインデックス "

パーティション全体のキーが同じであればどうすればよいですか? site_id列にインデックスを付けることの利点はありますか?

私が最初に読んだとき、すべての行に同じキーがあるとしたら(site_id = 'google_com')、インデックスにする必要はありません。ここ


は、SQL illustraingのDB構造及び典型的な使用である:

TABLEサイトを作成する( SITE_IDのVARCHAR(50)PRIMARY KEY、 DESCRテキスト )。

- REQマスターテーブル
が表REQ( SITE_IDのVARCHAR(50)、 タイムスタンプタイムスタンプ )を作成しています。

- 今のサイト(SITE_ID)VALUES( 'google_com')INTO

INSERT、いくつかの子テーブルを作成してみましょう。 CREATE TABLE req_google_com( CHECK(site_id = 'google_com') )インヘリット(req);

INSERT INTOサイト(site_id)VALUES( 'twitter_com'); CREATE TABLE req_twitter_com( CHECK(site_id = 'twitter_com') )インヘリット(req);

- req_google_com VALUES( 'google_com'、now())、( 'google_com'、now());

答えて

0

はい、テーブル内のすべてのデータが同じ列値を持つ場合、インデックスは必要ありません。実際には、列はまったく必要ありません。

索引を使用していて、WHERE句の結果などに使用されている場合は、 これにより実際には処理が遅くなる可能性があります。行をフィルタリングするための索引を使用することは、テーブル全体の小さなサブセット(最大でも10パーセントと言います)が選択された場合にのみ有効です。索引にアクセスしてそこにあるすべての行で終わると、エネルギーが無駄になります。

私は、次の提案を越え を付属のマニュアルを読んでいる間:「 については、各パーティション、 キー列に索引を作成」

あなたはドキュメントが話していたよろしいですパーティションキー?グローバルプライマリキーではありませんか?

+0

DB構造を表示するために元の投稿を編集しました。私はsite_id列を取り除くことはできません。 site_idの値は、特定のフラグメントでは常に同じですが、別のものでは異なり、WHERE句では透過的な方法でデータにアクセスします(master reqテーブルから選択します)。 – Prikrutil

+0

私はそれを "各パーティションごとに、site_idカラムにインデックスを作成する"と読みました。申し訳ありませんが、私は "グローバルプライマリキー"と "パーティションキー"の違いを理解していない – Prikrutil

関連する問題