我正在使用PostgreSQL。
在每个表中,将uuid设置为“ id”列中的主键。
这时,在某些条件子句中 当使用“ id”和“ name”作为条件时,
“ id”和“ name” [“ unique”]的复合索引有意义吗?
由于“ id”已经用作唯一键,因此我认为它后面的“名称”毫无意义。
如果是这种情况,是否不需要所有唯一列的复合索引?
谢谢!
[编辑]
PostgreSQL版本:v9.1
[我做了]
我创建了两个索引“ id”,其中“ name”组合唯一索引,而只有“ id”唯一索引。
如果我以“ id”和“ name”为条件的查询以及以“ id”为条件的查询作为执行计划,
我注意到两个执行计划使用不同的索引。
答案 0 :(得分:1)
是的,附加约束是没有意义的:如果id
由于是主键而唯一,则id
和name
的组合也是唯一的。
之所以需要这种在概念上不必要的唯一约束,是因为外键必须引用主键或精确包含目标行的唯一约束。否则,可能不清楚某个外键引用了哪些约束。