我有一个包含3列的表格:
PersonId uniqueidentifier
- 键DeviceId uniqueidentifier
- 键Counter bigint
counter
有升值,但有时会有差距。计数器值的示例是(1,2,3,1000,10000,10001,10002,...)
。计数器值一次保存一个。如果我为每个计数器值插入一行,那么表会非常快。我必须保留最后1000个计数器值并删除早期值。
是否可以将计数器值连接成varbinary(8000)
类型中的1行或几行,并在二进制文件的开头删除早期值作为插入操作的一部分?我想帮助写这个查询。我不想使用varchar
,因为每个字符占用2个字节。可能有比我想象的更好的方式。任何帮助表示赞赏!
答案 0 :(得分:0)
也许你可以选择一个中间解决方案:让每一行都有10个bigint类型的列。这样可以将行数减少10,并将每行开销减少10倍。也许这对你来说已经足够了。
答案 1 :(得分:0)
为什么要尝试这样做而不是使用具有PersonID,DeviceID,Counter的表,并且每个PersonID和DeviceID对只允许一定数量的计数器?
如果您的目标是节省空间,请记住varbinary(8000)将保留8000个字节,最多允许1000个bigint值,而不考虑您拥有多少个计数器。
大多数PersonID和DeviceID对都有1000个计数器的可能性有多大?
最后,你只是让自己变得更加复杂,未来的员工更难维护,但你真的在节省空间吗?
您还必须添加一些交易流程,这会占用您服务器的更多资源。
但要严格回答你的问题:是的,这是有可能的。我猜一个sproc末尾的触发器或进程可以处理你想要做的事情。