默认情况下,唯一约束是索引吗?SELECT ... WHERE
如果不是,在子句中使用唯一约束时,它是否具有与索引列相同的性能结果?
谢谢
默认情况下,唯一约束是索引吗?SELECT ... WHERE
如果不是,在子句中使用唯一约束时,它是否具有与索引列相同的性能结果?
谢谢
唯一约束必然是索引。您通常将其定义为“唯一索引”。在任何情况下都需要索引来有效地实现唯一约束,因此拥有一个索引并不是缺点。
约束实际上与索引非常不同:它只是说 MySQL 应该为您强制执行唯一性。然而,索引(尽管它可以是唯一的)与硬盘上的物理顺序有关,或者与允许在列上有效搜索的其他结构(通常是树)有关。
但是,您可能会将所有这些与定义(通常是聚集的)唯一索引的主键混淆。
唯一性约束是一种表达某事物(如属性值的某种组合)在整个关系(“表”)范围内必须是唯一的事实的方式。
那是在逻辑设计的水平上。
索引是帮助强制执行此类约束的一种可能有用的方法。
那是在物理设计级别。
某些 DBMS 产品可能会从某些逻辑设计构造(例如 UNIQUE 约束)的存在中推断出某些物理设计构造,例如某些索引的存在。其他人可能不会。
UNIQUE 实际上是对索引的约束,所以是的,UNIQUE 意味着在您强制执行唯一性的字段上有一个索引。
在开始使用唯一约束之前检查主键约束。
主键约束相当于声明唯一约束和非空约束。如果主键中有多个列,则每一列都会获得一个非空约束,但唯一约束适用于所有列。
当您声明主键时,DBMS 将为您创建一个索引。如果愿意,您可以删除索引,但是当 DBMS 进行表扫描以检查唯一性时,您将获得可怕的性能。
主键约束强制实体完整性,而 REFERENCES(外键)约束强制参照完整性。它们一起在确保数据完整性方面大有帮助。