2

我有一个包含 3 列的表:

  • PersonId uniqueidentifier- 钥匙
  • DeviceId uniqueidentifier- 钥匙
  • Counter bigint

counter值上升,但有时有差距。计数器值的一个示例是(1,2,3,1000,10000,10001,10002,...)。计数器值一次保存一个。如果我为每个计数器值插入一行,表格会很快变大。我必须保留最后 1000 个计数器值,并且可以删除早期值。

是否可以将计数器值连接到类型中的 1 行或几行中varbinary(8000),并在插入操作的过程中删除二进制开头的早期值?在编写此查询时,我需要帮助。我不喜欢使用varchar,因为每个字符会占用 2 个字节。可能有比我想象的更好的方法。任何帮助表示赞赏!

4

2 回答 2

0

也许你可以选择一个中间的解决方案:让每一行有 10 个左右的 bigint 类型的列。这会将行数减少 10 行,并将每行开销减少 10 倍。也许这对你来说已经足够了。

于 2012-09-28T19:56:45.123 回答
0

为什么要尝试这样做而不是使用带有 PersonID、DeviceID、Counter 的表,并且每个 PersonID 和 DeviceID 对只允许一定数量的计数器?

如果您的目标是节省空间,请记住 varbinary(8000) 将保留 8000 个字节,最多允许 1000 个 bigint 值,而不考虑您有多少个计数器。

这些 PersonID 和 DeviceID 对中的大多数有 1000 个计数器的可能性有多大?

最后,你只是让自己变得更复杂,让未来的员工更难维护,但你真的在节省空间吗?

您还必须添加一些事务进程,这将占用更多服务器资源。

但是要严格回答您的问题:是的,这是可能的。我猜存储过程结束时的触发器或进程可以处理你想要做的事情。

于 2012-09-28T23:36:20.317 回答