1

何百万ものレコードを持つテーブルがあり、テーブル パーティション分割の実装を検討しています。それを見ると、パーティションを作成したい外部キー「GroupID」があります。これは可能ですか?

グループにはさらにエントリが追加されるため、新しいグループ ID が追加されると、パーティションを動的に作成できますか?

4

2 に答える 2

1

はい、パーティショニングを使用できます。はい、新しいパーティションを動的に作成できます。ただし、更新する必要のないパーティショニング スキームを使用するのが最も簡単です。

SQL Enterprise 2005 以降:

SQL 2005 以降では、SQL 開発版またはエンタープライズ版を使用している場合、パーティショニングの透過的なサポートが組み込まれています。パーティションを動的に追加するということは、新しいパーティション関数、新しいパーティション スキーム、そしておそらく新しいファイル グループを作成する必要があることを意味します。

SPLIT を使用してパーティション関数を変更できます。

ALTER PARTITION FUNCTION MyPartitionFunction ()
SPLIT RANGE (2);

SQL 2000 または SQL 2005 以降の非エンタープライズ:

それ以外の場合でもパーティショニングを使用できますが、古い MS SQL 2000 の方法で行う必要があります。古い方法では、多くのテーブルを物理的に作成してから、各テーブルの UNION ALL であるビューを作成する必要がありました。そのため、事前にスキーマの知識が必要です。

古いパーティショニング方法の良いニュースは、新しいパーティションを動的に作成することがさらに簡単になったことです。新しい制約で新しいテーブルを作成し、ビューを更新するだけです。

ただし、いくつかの制限があります。パーティショニング列は主キーの一部である必要があります。ビューに直接挿入するには、Identity 列 (MS SQL によって自動インクリメントされるもの) を持たない必要があります。

于 2010-03-26T16:48:48.370 に答える
1

グループ ID は、パーティション化するのに最適な項目ではない場合があります。パーティション化は、ローリング ウィンドウ効果に適しており、古いデータの削除と新しいデータのロールインを目的として設計されています。

ID でグループ化することにより、グループの追加/削除のみを許可します。たとえば、時間の要素やデータの寿命はありません。また、パーティション化されたテーブルごとに 1000 個のパーティションというハード リミットがあり、1000 個のグループに制限されます。グループ ID を追加するつもりであり、それが静的な番号として示されていないため、このハード リミットに達する可能性があります。

この 1000 の制限を拡張する唯一のオプションは、分割された複数のテーブルに分割されたビューを配置することです。

私が尋ねる質問は、新しいデータが追加されたり、古いデータが削除されたりする原因と、それがどのような根拠で作成されたのかです。テーブルが何百万もの行であるという理由だけで、パーティション分割の直接の候補にはなりません。それが、私が質問する理由です。

それらを動的に追加するという点では、その機能は存在しません。ストアドプロシージャとロジックを記述して、新しいファイルグループの割り当て/次に使用するセットとパーティション関数の分割を処理する必要があります。実行できますが、SQL はそれを実行しません。

于 2010-03-26T16:49:25.710 に答える