1

GETDATE() から 1 か月より前の CreatedDate 列に値を持つすべての行を 1 つのパーティションに配置し、残りを別のパーティションに配置して、最新データの 2 番目のパーティションとアーカイブの 1 番目のパーティションをクエリするように範囲で指定できますか?データ?

4

1 に答える 1

5

いいえ、できません。パーティション関数は決定論的でなければなりません。決定論的関数は、特定の入力値のセットで呼び出されるたびに、常に同じ結果を返します。 残念ながら、GetDate()非決定論的な関数です。GetDate()残念ながら、 は非決定論的関数であるため、 使用できませんGetDate()

詳細については、 http://shannonlowder.com/2010/08/partitioning/を参照してください。

@Ismail代替手段があります:

ビット列 LastMonth を作成し、LastMonth 列に基づいてパーティション関数を作成します。データの使用を開始する前に、フィールドを毎日更新する必要があります。毎日行う必要はありません。選択した期間 (週/月/四半期) に 1 回、選択した列を更新して新しいデータにフラグを付ける (またはパーティション関数を変更する) 方が良いかもしれません。このアプローチは試していません。列を更新した後、完全なパフォーマンスを得るには、テーブルのメンテナンスを開始する必要がある場合があります。

機能する可能性のある別のアイデアは、毎月のパーティションを作成し、新しい月の開始時にファイル グループを変更することです。たとえば、高速ディスク f: に最新のデータが必要で、s: に履歴が必要な場合は、s: に PartitionJan があり、f: に PartitionFebruary があります。マーチが始まったら、PartitionFebruary を s: に移動し、f: で PartitionMatch を使い始めます。

于 2011-02-28T10:12:04.933 に答える