【问题标题】:Table index performance. options about choosing primary key表索引性能。关于选择主键的选项
【发布时间】:2011-11-16 19:11:38
【问题描述】:

我对选择表的主键有疑问。 假设我们有 3 个相关的表,如下所述:

TBL_A
{
 'A1' varchar (64), // assume this is the unique attribute.
 'A2' varchar (64),
}

TBL_B
{
 'B1' varchar (64), // assume this is the unique attribute.
 'B2' varchar (64),
}

TBL_C
{
 'C1' varchar (64), // assume this is the unique attribute.
 'C2' varchar (64),
}

关系:

  • 在 TBL_A 和 TBL_B 之间为多对多,
  • 在 TBL_AB 和 TBL_C 之间作为 ONE to Many

问题是:

  1. 哪个更好:选项A:将每个表的唯一属性设置为表的主键?或选项 B:创建另一个属性作为 id(自动编号)并使用唯一约束设置表的唯一属性,.? (将应用于所有这三个表)。

  2. 然后 TBL_AB 将需要从 TBL_A 和 TBL_B 复制主键作为引用键。这个问题又像我之前的问题一样,我们是否应该将这两个引用的键保留为 TBL_AB 的主键,.?或者创建一个新的唯一属性(自动编号)作为 TBL_AB 的主键并让两个引用的属性具有唯一约束会更好。?

  3. 因为od TBL_C 会引用TBL_AB 的主键,所以前面两题我们选择的选项当然会生效。如果我们选择第一个选项,将有两个引用属性,但如果我们选择第二个选项,我们将只有一个引用属性。你觉得呢?

这个想法是,当我们处于搜索情况时,查询整数(或数字)类型的主键会比 varchar 类型的主键执行得更快,.? 哪一个更好,。?当然,如果你有“为什么”的话。

感谢您的每一个回答和建议,。 问候,

【问题讨论】:

  • 为什么你有b1c1作为他们表的属性?仅仅是因为这是Tbl_A 中的密钥,还是因为它也是他们唯一密钥的一部分?您存储/处理了多少行(请记住,在连接期间处理的行数会增加!)? Tbl_AB 的定义是什么/在哪里 - 它是联合/视图还是什么,您为什么要合并这些表?

标签: sql database-design primary-key


【解决方案1】:

我不会太担心主键是 varchar。现在需要将 varchar 添加到索引中,或者如果没有,每次查找都需要去访问表在需要时获取 varchar。 除非您的表有数百万条记录,否则只需按照自然方式设置主键即可。

【讨论】:

  • 谢谢你,Rodolfo,我想我会对你的答案投票,并以自然的方式。多谢,。 :)
猜你喜欢
  • 2012-08-12
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 2018-10-11
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多