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 的唯一键和索引有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

mysql中,索引,主键,唯一索引,联合索引的区别是?对数据库的性能有啥影响?

Oracle数据库主键约束与唯一索引有啥区别?

Oracle数据库主键约束与唯一索引有啥区别?

主键、外键和索引的区别?

mysql 主键和唯一索引的区别

SQLServer主键和唯一约束的区别