在多对多表中,最好使用为每列创建索引的 FK,复合索引,因为无论如何都会对两个键进行查询(假设有 2 列),还是同时使用 FK 和复合索引同时?
2 回答
我会同时使用。它们服务于不同的目的。如果复合索引是指列的组合是唯一的,那么您需要它来实现引用完整性。为了完整性,您还需要两列上的外键,以便存在于多对多表中的每个值也存在于它映射的表中。这同时创建了用于连接的索引,您肯定会这样做。
如果您想提高速度,可以使用 NoSQL 代替 RDBMS。
但是,假设 A 和 B 是两个表,AID 是 A 的键,BID 是 B 的键。A 和 B 之间存在多对多关系,因此您创建的 AB 表具有一列用于 AID,另一个用于 BID。如果您不创建主键,那么您可能会有重复项,应该避免这种情况。所以你需要一个 AB 的主键。如果主键是 AID,那么您不能插入相同 AID 的两个不同配对。如果 AID = 1 有两对,BID = 1 和 BID = 2,那么你会成功插入 AID = 1,BID = 1,但是当你尝试插入 AID = 1,BID = 2 时,系统会抛出错误,因为 AID = 1 已经存在并且是主键。总之,您绝对需要 AB 表的二维键 (AID, BID)。
现在让我们转向外键。如果您不为引用 A.AID 的 AB.AID 创建外键,则可以从 A 表中删除一条记录,并且 AB 中仍然存在不存在的 id。因此,您需要为 AID 和 BID 创建外键。这比速度优先级更高,这是一个数据完整性保护问题。