在SQL Server中连接bigint值

时间:2012-09-28 18:57:19

标签: sql-server

我有一个包含3列的表格:

  • PersonId uniqueidentifier - 键
  • DeviceId uniqueidentifier - 键
  • Counter bigint

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

是否可以将计数器值连接成varbinary(8000)类型中的1行或几行,并在二进制文件的开头删除早期值作为插入操作的一部分?我想帮助写这个查询。我不想使用varchar,因为每个字符占用2个字节。可能有比我想象的更好的方式。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

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

您还必须添加一些交易流程,这会占用您服务器的更多资源。

但要严格回答你的问题:是的,这是有可能的。我猜一个sproc末尾的触发器或进程可以处理你想要做的事情。