唯一索引和非唯一索引

唯一索引是这样一种索引,它通过确保表中没有两个数据行具有完全相同的键值来帮助维护数据完整性。

为包含数据的现有表创建唯一索引时,会检查组成索引键的列或表达式中的值是否唯一。 如果该表包含具有重复键值的行,那么索引创建过程会失败。 为表定义了唯一索引之后,每当在该索引内添加或更改键时就会强制执行唯一性。 此强制执行包括插入、更新、装入、导入和设置完整性以命名一些键。 除了强制数据值的唯一性以外,唯一索引还可用来提高查询处理期间检索数据的性能。

非唯一索引不用于对与它们关联的表强制执行约束。 相反,非唯一索引通过维护频繁使用的数据值的排序顺序,仅仅用于提高查询性能。

包括和排除 NULL 键

可创建唯一索引和非唯一索引,以便当键的所有列或表达式为空时不将该键插入到索引对象中。 对于您不希望查询访问与空键相关联的数据的情况,排除空键可以使存储和性能优化得到改进。 对于唯一索引,强制执行表数据的唯一性将忽略其中的索引键为空的行。

主键或唯一键约束与唯一索引之间的差别

了解主键约束或唯一键约束与唯一索引之间没有很大差别这一点很重要。 为了实现主键约束和唯一键约束的概念,数据库管理器使用唯一索引与 NOT NULL 约束的组合。 因此,唯一索引本身不强制执行主键约束,因为它们允许空值。 虽然空值表示未知值,但在建立索引时,会将一个空值视为与其他空值相同。

因此,如果唯一索引由单个列组成,那么只允许一个空值 - 多个空值将违反唯一约束。 类似地,如果唯一索引由多个列组成,那么值与空值的特定组合只能使用一次。