あなたは寒さのデータを離れてパーティションを作成する場合は、主要なブールインデックス列はそれを行うための有効な方法です。この列は、ホット/コールドパーティションにするすべてのインデックスに追加する必要があります。これには、クラスタード・インデックスも含まれます。これはかなり厄介です。照会オプティマイザーでは、ダミー述部where IsActive IN (0, 1)
を追加して、その索引を引き続き検索できるようにする必要があります。もちろん、これは寒さのデータにも触れます。だから、IsActive
の具体的な値を知っているか、最初に1
の値を試して、それが99%の時間と一致することを確認する必要があります。
スキーマによっては、これは実用的ではありません。私はこれについて良い事例は見たことがないが、私はそれが存在すると確信している。
別のやり方では、パーティション分割を使用することです。ここでは、問合せオプティマイザは複数のパーティションをプロービングするのに使用されますが、再びコールド・データを検証する必要はありません。何も見つからない場合でも、ページがメモリにプルされ、パーティション化の問題が解決されます。
履歴表の考え方(例:HistoricalOrders
)は、さまざまな服で同じことです。
だから、あなたが必要とするこの作品にするために:すべてのあなたが(おそらくすべて)に関するものです、インデックス、またはパーティションを変更し
- を、または履歴テーブルを作成します。
- ほとんどの場合、コールドパーティションをプローブする必要はありません。
私は(2)ほとんどの場合それを殺すと思う。
3つのソリューションの中で、最も簡単なので、私はおそらくインデックスソリューションを選択します。いつでも間違ったクエリを書くことによって人々が間違いを犯すことを心配しているなら、私は別のテーブルを選ぶでしょう。それは間違いを難しくしますが、コードはかなり厄介です。
多くのインデックスは既に自然にパーティション化されていることに注意してください。 ID列または増加する日時列の索引は、最後は熱く、別の場所は寒いです。 (OrderStatus INT, CreateDateTime datetime2)
のインデックスは注文ステータスごとに1つのホットスポットを持ち、それ以外の場合は寒いでしょう。だからすでに解決済みです。
Some further discussion.
出典
2016-11-11 11:32:49
usr
現時点では、linqクエリを表示できますか? – Sampath
@Sampath Havenはまだ書いていませんが、最初のアプローチでは、 _context.Set().Where(o => o.IsActive == true) –