如果表在Mysql中具有唯一列,是否必须具有ID列?

Yet*_*eti 0 mysql

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

A有两列 - id, photo_id. id是主键并且photo_id是唯一的。

A中需要引用B

3个问题:

  1. 我可以忽略A'sid并用于photo_id链接两个表吗?
  2. 与在 B 中使用唯一列相比,使用主列有什么好处吗?
  3. 拥有外键会有什么不同?我可能不会使用外键,因为它在我使用的服务器上不受支持。当有 1+mil 记录时,这会产生显着差异吗?

Pat*_*and 5

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

回答您的问题:

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

  • 如果要按最新照片排序,请添加“时间戳”列。 (3认同)