如果表在Mysql中有唯一的列,是否需要有一个ID列?

时间:2010-05-28 16:21:37

标签: mysql

我有两张表AB。两个表都有超过100万条记录。

A有两列 - idphoto_idid是主键,photo_id是唯一的。

A需要在B中引用。

3个问题:

  1. 我可以忽略A的{​​{1}}并使用id链接这两个表吗?
  2. 使用主列有什么好处,而不是在B中使用唯一列?
  3. 拥有外键会有什么不同?我可能不会使用外键,因为我在使用的服务器上不支持它。当有超过1百万的记录时,这会产生显着的差异吗?

2 个答案:

答案 0 :(得分:4)

跳过有一个id列。如果你有一个已经唯一的photo_id,你应该使用它。主键(在MySQL InnoDB中)是自动聚类的,这意味着数据存储在索引中,如果您使用主键作为参考,则可以非常有效地检索整行。

回答你的问题:

  1. 是。并删除id列。它是一个人工密钥,与使用photo_id
  2. 相比没有任何好处
  3. 是。主键索引是群集的,可以对精确查询和范围查询进行非常高效的查询。 (即select * from photos where 2 < id AND id < 10
  4. 外键对数据库表施加约束,并确保表中的数据处于一致状态。没有外键,你必须有一些应用程序级逻辑来确保一致性。

答案 1 :(得分:0)

如果您认为photo_id值永远不会改变,我只会删除您的ID列。如果B表的多行引用特定的A行,并且需要更新该行的photo_id,则需要引用B表中的id列。