GETDATE() から 1 か月より前の CreatedDate 列に値を持つすべての行を 1 つのパーティションに配置し、残りを別のパーティションに配置して、最新データの 2 番目のパーティションとアーカイブの 1 番目のパーティションをクエリするように範囲で指定できますか?データ?
1 に答える
いいえ、できません。パーティション関数は決定論的でなければなりません。決定論的関数は、特定の入力値のセットで呼び出されるたびに、常に同じ結果を返します。
残念ながら、GetDate()
非決定論的な関数です。GetDate()
残念ながら、 は非決定論的関数であるため、
使用できませんGetDate()
。
詳細については、 http://shannonlowder.com/2010/08/partitioning/を参照してください。
@Ismail代替手段があります:
ビット列 LastMonth を作成し、LastMonth 列に基づいてパーティション関数を作成します。データの使用を開始する前に、フィールドを毎日更新する必要があります。毎日行う必要はありません。選択した期間 (週/月/四半期) に 1 回、選択した列を更新して新しいデータにフラグを付ける (またはパーティション関数を変更する) 方が良いかもしれません。このアプローチは試していません。列を更新した後、完全なパフォーマンスを得るには、テーブルのメンテナンスを開始する必要がある場合があります。
機能する可能性のある別のアイデアは、毎月のパーティションを作成し、新しい月の開始時にファイル グループを変更することです。たとえば、高速ディスク f: に最新のデータが必要で、s: に履歴が必要な場合は、s: に PartitionJan があり、f: に PartitionFebruary があります。マーチが始まったら、PartitionFebruary を s: に移動し、f: で PartitionMatch を使い始めます。