当前位置:  开发笔记 > 数据库 > 正文

在SQL Server中创建UNIQUE索引作为"索引"或"约束"有什么区别?

如何解决《在SQLServer中创建UNIQUE索引作为"索引"或"约束"有什么区别?》经验,为你挑选了2个好方法。

在要创建UNIQUE(但不是表的主键)的列上创建索引时,SQL Server让我选择以下几个选项:

1)我可以选择它作为约束或索引.
我猜这意味着如果我将它设置为约束,它将不会在查询时使用它,只有在写入时.但是,我能想到的SQL Server强制执行该约束的唯一有效方法是实际构建索引.这个选项有什么用?

2)此外,如果我将其设置为"索引",它让我指定它应该忽略重复键.这对我来说是最令人费解的......
我再次猜测它意味着与约束相反.它可能意味着"在查询时使用它,但在写入时甚至不检查".
但那我为什么要把它设置为独一无二的呢?
我猜测SQL Server可以做一些优化,但我想更好地理解它.

有谁知道SQL Server对这些选项究竟做了什么?
将索引设置为Unique,但忽略重复键的用例是什么?

注意:这适用于SQL Server 2000


编辑:根据你所说的,但是......如果我创建一个约束,它是否会用于加速使用约束中的字段进行过滤的查询?

谢谢!



1> onedaywhen..:

一个UNIQUE约束条件是ISO/ANSI SQL标准的一部分,而索引是不是因为这个标准是实现无关.与大多数SQL DBMS一样,SQL Server将使用索引来实现UNIQUE约束.

可以说,使用UNIQUE而不是在SQL脚本指数略微更便携,但一如既往的专有语法应不排除如果provids优化等机会



2> harpo..:

SQL Server将构建一个索引来实现UNIQUE约束.你可以看到,以用来执行的唯一约束的唯一索引的参考sys.key_constraints视图(2005年-对不起,我不知道相当于2000).但是这两个版本在查询时都会使用索引.

不同之处在于,如果您创建索引,则可以更好地控制索引的构建方式.特别是,您可以包含可以与密钥一起查找的其他列.

这两种方法都可以让你"忽略重复键"上现有的数据,但如果你试图插入一个既会引发错误的新一个复制一个现有的值.

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有