【发布时间】:2011-08-31 22:52:10
【问题描述】:
这是我的简单场景:
我有一个用户表和一个位置表。 ONE User 可以与 MANY Locations 相关,所以我有一个 UserLocation 表,如下所示:
ID (int-Auto Increment) PK
UserID (Int FK to the Users table)
LocID (Int FK to the Locations table)
现在,由于 ID 是 PK,因此默认情况下它在 SQL-Server 中被索引。我对其他两列有点困惑:
OPT 1: 我在两列上都定义了一个索引,例如: IX_UserLocation_UserID_LocID
或
OPT 2: 我定义了两个单独的索引,例如:IX_UserLocation_UserID & IX_UserLocation_LocID
如果两者都做同样的事情,请原谅我 - 在这种情况下请解释一下。如果不是 - 哪个更好,为什么?
【问题讨论】:
-
您真的需要联结表中的自动递增代理
id字段吗?它有什么用?我会在 2 个 FK 列上创建一个复合主键。将针对该表运行哪些查询?他们会通过user、location还是两者都查找? -
谢谢你们。仅供参考 - ID 列是我们的传统,我们将它保存在所有表中,在大多数地方它用于唯一记录标识符的目的。我知道这里 UserID + LocID 可以是一个复合 PK,但为了简化和标准化,我们保留了 ID 字段。如果这不令人信服 - 现在忘记 ID 密钥!
标签: sql-server indexing