在多对多的表中,使用FK为每一列创建索引,还是使用组合索引更好,因为查询无论如何都会在两个键上完成(假设有2列),还是同时使用FK和组合?
发布于 2013-03-28 08:31:55
我两个都会用。它们服务于不同的目的。如果您所说的复合索引是指列的组合是唯一的,那么您需要它来实现引用完整性。您还需要两个列上的外键以保证完整性,以便多对多表中存在的每个值也存在于它所映射的表中。这将同时创建用于连接的索引,这是您肯定要做的。
发布于 2013-03-28 08:49:33
如果您想提高速度,可以使用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表中删除一条记录,而不存在的id仍将存在于AB中。所以你需要为AID和BID创建外键。这是比速度更高的优先级,这是一个数据完整性保护问题。
https://stackoverflow.com/questions/15672132
复制相似问题