哪个更有效地存储和处理一系列项目:十进制还是整数?

时间:2017-10-03 14:52:27

标签: c# sql algorithm sorting seq

哪种方法更有效地存储和处理项目序列:十进制或整数?

例如,假设我有一个导航菜单的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#

  • int - 32位/ 8 = 4个字节。
  • decimal - 128位/ 8 = 16字节。

SQL

  • int - 4个字节。
  • decimal - 取决于精确度。最低= 5个字节,最大= 17个字节。

1 个答案:

答案 0 :(得分:1)

int

好的,一般情况下,如果你在大多数情况下都有更好的东西,而在某些情况下其他更好的东西,问题归结为“每种情况好多少?”并且“一个人与另一个相比多久发生一次?”

现在,decimal获胜的地方是,如果您想在23之间放置一些内容,可以将其放入2.5然后如果有需要在22.5之间,您可以将其放在2.25中,依此类推。

最终,当你需要在1.1200000000000000000000000000000000001.120000000000000000000000000000000001之间放置一些东西时,你可以得到你在数据库中为小数设置的任何精度。你可能认为这不太可能,但有人翻转相同的两三件物品可以让你快速到达那里。你将不得不为这个烂摊子做些什么。

你的边缘情况比decimal做得更好的地方更糟糕。

由于int在所有其他方面都做得更好,为什么还要为处理不会让你赢得太多的复杂混乱而烦恼呢?

如果移动中的UI通过逐个向上或向下移动项目来实现,那么更是如此,因为您一次只需要翻转两个这样的整数。