【问题标题】:Advantages for Guid Field over nvarchar contains Guid?Guid 字段优于 nvarchar 的优势包含 Guid?
【发布时间】:2011-10-30 08:22:04
【问题描述】:

我想知道 UniqueIdentifier column 在 Db 中的优点是什么

Over nvarchar(32) 列,其中包含 Guid String being sent from c#

【问题讨论】:

  • @marc_s ,我想要 nvarchar ,因为我想:“我不需要所有这 32 个字符,我认为 8 个 guid CHARS 就足够了……” - 所以我从 32 个字符中删除了 8 个字符字符指南。 , 但可能不会那么独特...
  • guid(唯一标识符)不存储为文本;您只是在工具中看到了这一点(与日期不是文本相同)
  • 你真的需要 Michelle Ufford 的Performance Considerations of Datatypes ——她清楚地解释了WHY选择正确(最合适)至关重要数据列的数据类型
  • GUID 的每个单字节由 两个 十六进制字符 (0-9,A-F) 表示;一个字节的范围可以从 0 到 255 - 这些值以字符串形式表示为 00FF --> 两个 字符用于表示单个(二进制)字节
  • @marc_s 一如既往,感谢您的帮助和关注。

标签: c# sql-server uniqueidentifier


【解决方案1】:

从服务器的角度来看:

  • 我希望 Guid 字段的存储效率更高 - 它只需要 8 个字节,而不是 32 个或可能 64+ 个字节,具体取决于 nvarchar 的存储方式
  • 可以被服务器视为不透明的二进制数据 - 例如,在进行比较时需要没有智能。没有文化或大小写敏感性。它基本上不是文本数据,因此不存在与文本相关的所有问题和复杂性。
  • 服务器可以决定使用已知的 Guid 结构来更有效地建立索引。例如,如果某些位比其他位更可能是随机分布的,则这些位可用于索引。

从程序员的角度来看:

  • 它对预期数据做出了更清晰的陈述。
  • 您不需要任何验证,也永远不会担心无效数据 - 它们只是 GUID。

我非常喜欢以最接近数据逻辑含义的任何形式保存数据。例如,如果您要存储日期和时间数据,如果您有日期/时间值而不是字符串,那么比较等操作会变得更加简单。与字符串(或任何其他表示形式,但通常是字符串)之间的转换只应在需要的地方执行。

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2013-09-11
    • 2012-09-20
    • 1970-01-01
    • 2022-08-15
    相关资源
    最近更新 更多