小编典典

创建INDEX的UNIQUE参数-用途是什么?

sql

为什么INDEX创建语句具有UNIQUE参数?

据我了解,非聚集索引包含一个书签,即指向行的指针,它应该是唯一的以区分甚至非唯一行,
因此确保非聚集索引是唯一的?
正确的?

因此,我了解没有唯一索引只能在聚簇表上吗?自从

  • “视图上的聚集索引必须唯一” [1]

由于“聚集索引的底部或叶级包含表的实际数据行”
[1],因此我是否正确理解可以通过唯一约束(可能是全部或全部)来获得与UNIUE对聚集索引相同的效果。表[2]的列的一部分?

那么,带UNIQUE参数作为索引的原因是什么?
除了混淆基本概念定义[3]


更新:
这又是一个陷阱-解释一些已经基于未定义术语进行过多次解释的东西,从而将所有解释转换为永无止境的猜谜游戏。
请参阅我的子问题[4],这里实际上是对同一问题的重新措词。


Update2:
问题在于模棱两可,缺少定义或在不正确的上下文中不恰当地使用术语。如果将索引定义为用于(查找和)标识/指向实际数据的结构,则非唯一索引或NULL索引没有任何意义。再见


引用:
[1]
创建索引(Transact-SQL)
http://msdn.microsoft.com/zh-
cn/library/ms188783.aspx

[2]
创建表(Transact-SQL) http://msdn.microsoft.com/zh-
cn/library/ms174979.aspx


阅读 180

收藏
2021-04-14

共1个答案

小编典典

UNIQUE索引子句实际上只是SQL Server和其他一些DBMS中语法的古怪之处。在标准SQL中,唯一性约束是通过使用PRIMARY
KEY和UNIQUE CONSTRAINT语法实现的,而不是通过索引来实现的(标准SQL中没有索引)。

SQL Server在内部使用以实现唯一性约束的机制称为唯一索引。每当您创建PRIMARY
KEY或UNIQUE约束时,都会自动为您创建一个唯一索引。出于SQL Server开发团队最广为人知的原因,他们决定将UNIQUE关键字作为CREATE
INDEX语法的一部分公开,即使约束语法可以完成相同的工作。

为了清晰和标准支持,我建议您避免在任何可能的地方显式创建UNIQUE索引。请改用PRIMARY KEY或UNQIUE约束语法。

2021-04-14