5

默认情况下,唯一约束是索引吗?SELECT ... WHERE如果不是,在子句中使用唯一约束时,它是否具有与索引列相同的性能结果?

谢谢

4

5 回答 5

4

唯一约束必然是索引。您通常将其定义为“唯一索引”。在任何情况下都需要索引来有效地实现唯一约束,因此拥有一个索引并不是缺点。

于 2009-08-01T21:58:25.333 回答
2

约束实际上与索引非常不同:它只是说 MySQL 应该为您强制执行唯一性。然而,索引(尽管它可以是唯一的)与硬盘上的物理顺序有关,或者与允许在列上有效搜索的其他结构(通常是树)有关。

但是,您可能会将所有这些与定义(通常是聚集的)唯一索引的主键混淆。

于 2009-08-01T21:46:39.053 回答
1

唯一性约束是一种表达某事物(如属性值的某种组合)在整个关系(“表”)范围内必须是唯一的事实的方式。

那是在逻辑设计的水平上。

索引是帮助强制执行此类约束的一种可能有用的方法。

那是在物理设计级别。

某些 DBMS 产品可能会从某些逻辑设计构造(例如 UNIQUE 约束)的存在中推断出某些物理设计构造,例如某些索引的存在。其他人可能不会。

于 2009-08-01T22:00:34.923 回答
1

UNIQUE 实际上是索引的约束,所以是的,UNIQUE 意味着在您强制执行唯一性的字段上有一个索引。

于 2009-08-01T22:50:08.253 回答
0

在开始使用唯一约束之前检查主键约束。

主键约束相当于声明唯一约束和非空约束。如果主键中有多个列,则每一列都会获得一个非空约束,但唯一约束适用于所有列。

当您声明主键时,DBMS 将为您创建一个索引。如果愿意,您可以删除索引,但是当 DBMS 进行表扫描以检查唯一性时,您将获得可怕的性能。

主键约束强制实体完整性,而 REFERENCES(外键)约束强制参照完整性。它们一起在确保数据完整性方面大有帮助。

于 2009-08-02T13:15:17.120 回答