IsUnique=Yes 的唯一键和索引有啥区别?
Posted
技术标签:
【中文标题】IsUnique=Yes 的唯一键和索引有啥区别?【英文标题】:What is the difference between Unique Key and Index with IsUnique=Yes?IsUnique=Yes 的唯一键和索引有什么区别? 【发布时间】:2009-02-19 11:39:58 【问题描述】:我有一个带有主键的表,但我希望限制另外两列,这样可以保证两者的组合始终是唯一的。
(一个愚蠢的例子:在 BOOKS 表中,IBAN 列是主键,但 Title 和 Author 列的组合也应该始终是唯一的。)
在 SQL Server Management Studio 中,可以创建一个新索引并将 IsUnique 设置为 Yes,或者我可以创建一个新的唯一键。
这两种方法有什么区别,哪一种最适合哪些目的?
【问题讨论】:
以防万一:如果您需要允许多行为 NULL 但任何非 NULL 行必须是唯一的:要么使用触发器强制执行,要么使用具有唯一索引的视图 - 创建视图xxx AS SELECT Title, Author FROM Books WHERE (Title + Author) IS NOT NULL 然后在该视图上创建索引 感谢 Kirsten,这是有用的信息! 另见***.com/questions/366186/… 【参考方案1】:创建一个 UNIQUE 约束是对规则的更清晰的陈述。索引的 IsUnique 属性是一个实施细节 - 如何 实施规则,而不是 什么 规则。效果是一样的。
【讨论】:
@pylover:在某些情况下,约束(例如外键或非空)可以通过向优化器提供原本不会有的有用信息来提高性能。在唯一性的情况下,我想约束和索引之间没有区别,但不是 100% 确定。【参考方案2】:两者有明显区别。 唯一约束定义了哪些列组合必须是唯一的。 唯一索引只是确保上述内容始终有效的一种方式。 但是可能有一个支持唯一约束的非唯一索引。 (如果约束是可延迟的 = 仅在提交时有效,但允许在事务中间中断)
【讨论】:
【参考方案3】:让您知道,当您创建唯一约束时,SQL Server 将在后台创建索引
【讨论】:
【参考方案4】:我刚刚发现一个困难的方法是,在 SSMS 中,唯一键的脚本默认设置为 true,但索引的脚本设置为 False。当我使用 SSMS 中的 Script Table As 上下文菜单时,我没有得到我的唯一索引。
此外,如果类型设置为唯一键,则无法更改“忽略重复键”设置。首先,您将类型从唯一键更改为索引,然后您可以将忽略重复键设置为 true。
【讨论】:
【参考方案5】:唯一索引是唯一键。
【讨论】:
【参考方案6】:我不认为它们之间有任何区别,但是使用唯一索引,我们可以有两个好处,因为列已经是唯一的并且上面还有索引,所以我会更快地搜索。所以使用唯一索引更有好处。
【讨论】:
以上是关于IsUnique=Yes 的唯一键和索引有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章