为什么INDEX创建语句具有UNIQUE参数?
据我了解,非聚集索引包含一个书签,即指向行的指针,它应该是唯一的以区分甚至非唯一行, 因此确保非聚集索引是唯一的? 正确的?
因此,我了解没有唯一索引只能在聚簇表上吗?自从
由于“聚集索引的底部或叶级包含表的实际数据行” [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
UNIQUE索引子句实际上只是SQL Server和其他一些DBMS中语法的古怪之处。在标准SQL中,唯一性约束是通过使用PRIMARY KEY和UNIQUE CONSTRAINT语法实现的,而不是通过索引来实现的(标准SQL中没有索引)。
SQL Server在内部使用以实现唯一性约束的机制称为唯一索引。每当您创建PRIMARY KEY或UNIQUE约束时,都会自动为您创建一个唯一索引。出于SQL Server开发团队最广为人知的原因,他们决定将UNIQUE关键字作为CREATE INDEX语法的一部分公开,即使约束语法可以完成相同的工作。
为了清晰和标准支持,我建议您避免在任何可能的地方显式创建UNIQUE索引。请改用PRIMARY KEY或UNQIUE约束语法。