【问题标题】:Composite key vs extra unique column复合键与额外的唯一列
【发布时间】:2012-10-07 01:50:00
【问题描述】:

在两列上使用UNIQUE 约束与仅使用一列包含两列值/GUID 的串联并在其上使用索引之间是否存在任何重大开销差异?例如,与其使用|John|Smith|(两个不同的列)作为唯一约束,不如添加一个包含JohnSmith 或随机GUID 的额外列更有效?

【问题讨论】:

  • Johnny | SmithJohn | Nysmith 会中断
  • 真实数据不可能有这个,但搜索可以区分大小写。

标签: sql performance sqlite composite-key unique-constraint


【解决方案1】:

我会添加这两个列并对它们定义一个唯一约束,因为它们似乎具有业务相关性并且 GUID 似乎不合适。此外,不将它们组合在一起的动机是避免以后任何SUBSTRING 操作来单独处理它们。

【讨论】:

    【解决方案2】:

    索引本身并没有太大的区别,但是在表中添加额外的字段会使每条记录变大,从而由于额外的 I/O 而使对表的任何操作变慢。

    【讨论】:

      【解决方案3】:

      连接两列用作键似乎很愚蠢——当您声明复合键时,数据库完全有能力为您做这件事。向表中添加额外的 INT 或 GUID 键是否有意义取决于这两列是否真的表的主键。如果是的话,为什么还要携带额外列的额外开销(您仍然需要前两列的索引以确保它们保持唯一性)。但如果它们不是真正的主键(如在您的示例中,名字和姓氏在几乎任何现实世界系统中都不能被视为主键),那么您将需要一个单独的主键。

      【讨论】:

      • PK 是一个递增的 int(以支持现有的数据访问代码),但传入的数据没有单一的唯一属性(尽管我可以将 GUID 附加到它)。我不确定是否应该添加 GUID 列,并将 GUID 附加到数据中,或者合并两列以检查传入的数据是否唯一。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 2020-03-03
      • 2018-07-29
      • 2014-04-19
      相关资源
      最近更新 更多