gpt4 book ai didi

language-agnostic - 为 ID 列推荐什么数据类型?

转载 作者:行者123 更新时间:2023-12-04 09:29:46 25 4
gpt4 key购买 nike

我意识到这个问题很可能以前被问过,但我在 StackOverflow 上的问题中搜索了一些,但我并没有真正找到我的答案,所以这里是。如果您发现重复,请链接到它。

出于某种原因,我更喜欢使用 Guid s(uniqueidentifier in MsSql)用于我的主键字段,但我真的不知道为什么这样会更好。在我最近的许多教程中,我都经历了一个自动递增的 int已被使用。我可以看到两者的优点和缺点:

  • 一个 Guid总是具有相同的大小和长度,并且没有理由担心用完它们,而在用完适合 int 的数字之前,您可以拥有的记录数量是有限的。 .
  • int是(至少在 C# 中)一个可空类型,它在查询数据时打开了几个快捷方式。
  • int更容易阅读。
  • 我敢打赌,你至少可以在这里想出更多的东西。

  • 所以,正如标题所说的那样简单: 数据库中 ID(主键)列的推荐数据类型是什么?

    编辑:在收到几个简短的回答后,我还必须添加这个后续问题。没有它,你的答案既不引人注目也不具有教育意义......;) 你为什么这么认为,另一个选项的缺点是什么让你不选择它?

    最佳答案

    任何足以存储预期数据范围的整数类型。通常,对于具有大量行或更改的表,32 位整数被视为太小(正确或错误)。 64 位 int 就足够了。许多数据库不会或不会使用该整数类型,但会使用具有指定比例和精度的 NUMBER 类型。 10-15 位数是相当常见的尺寸。

    选择整数类型的原因有两个:

  • 尺寸;和
  • 速度。

  • 整数的大小为:
  • 32 位:4 字节;
  • 64 位:8 字节;
  • 二进制编码的十进制:每字节两位数字加上符号、比例和/或精度的字节。

  • 将其与 GUID 进行比较,它是 128 位或一个普通字符串,每个字符至少一个字节(在某些字符编码中更多)加上可能只有一个字节(终止 null)或在某些情况下可能更多的开销。

    对整数进行排序是微不足道的,假设它们是唯一的并且范围足够小,实际上可以在 O(n) 时间内完成,与最多 O(n log n) 相比。

    此外,同样重要的是,大多数数据库可以通过自动递增列和/或序列生成唯一 ID。否则,保证应用程序的唯一性实际上非常困难,并且往往会导致 key 膨胀。

    Plus 自动生成的整数键通常是松散或绝对有序的(取决于数据库和配置),这是一种有用的品质。随机生成的 GUID 基本上是无序的,用处不大。

    关于language-agnostic - 为 ID 列推荐什么数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/932102/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com