web-dev-qa-db-ja.com

パーティションキーも主キーの一部である必要がありますか?

主キーではない列に基づいてテーブルをパーティション化していますか?今日、パーティション列を主キーの一部にする必要があるかどうかについて、いくつかの矛盾する情報を読みました。私の腸はノーと言いますが、私は100%確信していません。だから質問...

  1. パーティション列はプライマリの一部である必要がありますか?どちらの方法をお勧めしますか?
  2. パーティションキーのインデックスを作成する必要がありますか、それともDBMSが自動的に作成しますか?
24
AngryHacker

まったくない

パーティション分割の最も一般的なシナリオの1つは、PKとはまったく関係のない日付フィールドを使用することです。

たとえば、フィールドOrdersを持つテーブルOrderDateがある場合、OrderDateの月と年に基づいてパーティションを作成する可能性が高くなります。

レコードが古くなり、関連性がなくなった場合、それらのパーティションをアーカイブテーブルまたはデータベースに移動して、処理されないようにすることができます。

パーティショニングはほとんどすべてのフィールドで機能しますが、うまく機能するためには、すべてではないにしても、ほとんどのクエリでパーティション化するフィールドを使用する必要があります。パーティションキーを含めない場合、基本的に、複数のテーブル(パーティション)にまたがる高価なテーブルスキャンが行われます。

[〜#〜]編集[〜#〜]

パート2では、私はthink答えも同様です。パーティションキーは、行を配置するパーティションを決定するために使用されますが、インデックスは維持されていないと思います。ただし、バックエンドに統計がある場合があります。

11
JNK

JNKの回答に加えて、おそらくテーブルパーティションとインデックスパーティションの調整について説明している この記事 を読む必要があります。

パーティション分割スキームが主キーの最初の列に正確に従う多くの種類のシナリオがあります。たとえば、ファクトテーブルのスナップショット日付が通常パーティション列と主キーの最初の列であるデータウェアハウスシナリオなどです。

しかし、同様に、OLTP PKがIDENTITYまたは他の代理キーである環境では、これをパーティションに使用しても意味がありません。通常、任意の数でのパーティション分割はあまり役立たないためです。In= OLTPシステムの場合、日付で分割する傾向があります(おそらくPKにはない)が、地域またはある種の組織部門によっても(おそらく、使用していない場合はPKに)代理)。

しかし、それは要件ではありません。

3
Cade Roux

主キー自体の一部ではない場合は、候補キーの一部である必要があります。つまり、パーティションは主キーと一致する必要があります。

したがって、答えは、はい、PKの一部であることが望ましいです。別のキーではない場合でも、PKになるのに十分なだけの優れたキーです。

0
srini.venigalla