2

3列のテーブルがあります:

  • PersonId uniqueidentifier- 鍵
  • DeviceId uniqueidentifier- 鍵
  • Counter bigint

counter値は昇順ですが、ギャップがある場合もあります。カウンタ値の例は次のとおりです(1,2,3,1000,10000,10001,10002,...)。カウンタ値は 1 つずつ保存されます。カウンター値ごとに 1 つの行を挿入すると、テーブルが非常に速く大きくなります。最後の 1000 個のカウンター値を保持する必要があり、初期値を削除できます。

カウンター値を型の 1 行または数行に連結しvarbinary(8000)、挿入操作の一部としてバイナリの先頭にある初期値を削除することは可能ですか? このクエリを作成する際に助けが必要です。varchar各文字が 2 バイトを占めるため、使用しないことを好みます。私が想像するよりも良い方法があるかもしれません。どんな助けでも大歓迎です!

4

2 に答える 2

0

中間の解決策を選択できるかもしれません: 各行に bigint 型の列が 10 程度あるようにします。これにより、行数が 10 削減され、行ごとのオーバーヘッドも 10 分の 1 に削減されます。たぶんそれで十分です。

于 2012-09-28T19:56:45.123 に答える
0

PersonID、DeviceID、Counter を含むテーブルを使用して、PersonID と DeviceID のペアごとに特定の数のカウンターのみを許可するのではなく、なぜそれをしようとしているのですか?

スペースを節約することが目標である場合、varbinary(8000) は 8000 バイトを予約し、最大 1000 個の bigint 値を許可し、カウンターの数を考慮しないことに注意してください。

これらの PersonID と DeviceID のペアのほとんどが 1000 個のカウンターを持つ可能性はどのくらいありますか?

最終的には、自分自身にとってより複雑になり、将来の従業員が維持するのが難しくなるだけですが、本当にスペースを節約していますか?

また、サーバーのリソースをさらに消費するトランザクション プロセスを追加する必要があります。

しかし、あなたの質問に厳密に答えると、はい、可能です。sproc の最後のトリガーまたはプロセスは、あなたがやろうとしていることを処理できると思います。

于 2012-09-28T23:36:20.317 に答える