表索引性能。选择主键的选项

时间:2011-11-16 19:11:38

标签: sql database-design primary-key

我对选择表的主键有疑问。 假设我们有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之间的
  • 为一对多

问题是:

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

  2. 然后TBL_AB需要将TBL_A和TBL_B中的主键都复制为引用键。如果我们将这两个引用的密钥保留为TBL_AB的主键,问题就像我之前的问题一样。或者更好的是创建一个新的唯一属性(自动编号)作为TBL_AB的主键,并使两个引用的属性具有唯一约束,。?

  3. 因为od TBL_C将引用TBL_AB的主键,当然我们在前两个问题中选择的选项将生效。如果我们选择第一个选项,将有两个引用的属性,但如果我们选择第二个选项,我们将只有一个引用的属性。你觉得怎么样?。

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

    谢谢你的每一个答案和建议。 的问候,

1 个答案:

答案 0 :(得分:1)

我不会太担心主键是varchar。使用自动编号作为主键的单独字段时的小幅度增加(如果有的话)可以通过现在需要将varchar添加到索引来抵消,或者如果不是,则每次查找都需要去访问该表到在需要时获取varchar。 除非您的表是数百万条记录,否则只需按照自然方式设置主键即可。