哪种方法更有效地存储和处理项目序列:十进制或整数?
例如,假设我有一个导航菜单的MenuItems的有序列表。我还有一个菜单编辑器。
重新序列可能涉及按序列号对项目列表进行排序,然后根据原始规则重新分配新的序列号。
这是一个用整数重新排序的例子......
我从这个项目列表开始:
parent_id, id, sequence
null, A, 0
A, B, 0
A, C, 2
A, D, 4
然后插入一个新项目:
parent_id, id, sequence
null, A, 0
A, B, 0
A, E, 1
A, C, 2
A, D, 4
然后重新排序以准备新插入:
parent_id, id, sequence
null, A, 0
A, B, 0
A, E, 2
A, C, 4
A, D, 6
这是一个为什么十进制不需要经常重新排序的例子:
我从这个项目列表开始:
parent_id, id, sequence
null, A, 0.0
A, B, 0.0
A, C, 1.0
A, D, 2.0
然后插入一个新项目:
parent_id, id, sequence
null, A, 0.0
A, B, 0.0
A, E, 0.5
A, C, 1.0
A, D, 2.0
通常,整数占用的存储空间小于小数。那么,使用存储量更少但处理更多的整数或存储更多且处理更少的小数更有效吗?
按整数和小数排序之间的性能是否存在差异?
以下是一些存储尺寸供参考:
C#
SQL
答案 0 :(得分:1)
int
。
好的,一般情况下,如果你在大多数情况下都有更好的东西,而在某些情况下其他更好的东西,问题归结为“每种情况好多少?”并且“一个人与另一个相比多久发生一次?”
现在,decimal
获胜的地方是,如果您想在2
和3
之间放置一些内容,可以将其放入2.5
然后如果有需要在2
和2.5
之间,您可以将其放在2.25
中,依此类推。
最终,当你需要在1.120000000000000000000000000000000000
和1.120000000000000000000000000000000001
之间放置一些东西时,你可以得到你在数据库中为小数设置的任何精度。你可能认为这不太可能,但有人翻转相同的两三件物品可以让你快速到达那里。你将不得不为这个烂摊子做些什么。
你的边缘情况比decimal
做得更好的地方更糟糕。
由于int
在所有其他方面都做得更好,为什么还要为处理不会让你赢得太多的复杂混乱而烦恼呢?
如果移动中的UI通过逐个向上或向下移动项目来实现,那么更是如此,因为您一次只需要翻转两个这样的整数。