我创建了一个没有主键的新表。但是该表确实具有一个唯一且已索引的字段。

该列具有唯一值,我可以将其设置为“主要”。
但是,对SQL性能会产生什么样的影响?如果不是主要因素,还会受到什么其他影响?

问候

最佳答案

如果该列可能包含NULL值,则它不能是主键。在这种情况下,唯一的索引是您可以做的最好的事情(请注意,这不能防止包含NULL值的多行)。

如果它永远不会包含NULL值,那么您绝对应该在该列上添加NOT NULL约束,或者使其成为主键。无论哪种方式,这都告诉优化器该列永远不会包含NULL值,这使它可以考虑某些其他情况下无法实现的查询优化。

我不希望在(a)主键约束和(b)唯一索引与NOT NULL约束的组合之间不会有任何明显的性能差异。两种方式都为优化器提供了有关表内容的相同信息。两者都可以用作外键的目标。但是,有些特定功能需要存在主键-例如,索引组织的表必须具有一个。

10-04 11:14
查看更多