我创建了一个没有主键的新表。但是该表确实具有一个唯一且已索引的字段。
该列具有唯一值,我可以将其设置为“主要”。
但是,对SQL性能会产生什么样的影响?如果不是主要因素,还会受到什么其他影响?
问候
最佳答案
如果该列可能包含NULL
值,则它不能是主键。在这种情况下,唯一的索引是您可以做的最好的事情(请注意,这不能防止包含NULL
值的多行)。
如果它永远不会包含NULL
值,那么您绝对应该在该列上添加NOT NULL
约束,或者使其成为主键。无论哪种方式,这都告诉优化器该列永远不会包含NULL
值,这使它可以考虑某些其他情况下无法实现的查询优化。
我不希望在(a)主键约束和(b)唯一索引与NOT NULL
约束的组合之间不会有任何明显的性能差异。两种方式都为优化器提供了有关表内容的相同信息。两者都可以用作外键的目标。但是,有些特定功能需要存在主键-例如,索引组织的表必须具有一个。