具有“独特”的唯一键或索引

时间:2011-10-05 13:02:58

标签: sql sql-server-2008-r2 ssms

我有一个相当愚蠢的问题。我将简化这种情况:我在SQL Server 2008 R2中有一个表,其中有一个字段'ID'(int,PK)和一个Name(nvarchar(50))和Description(text)字段。名称 - 字段中的值应为唯一。搜索表时,将使用名称 - 字段,因此性能是关键。

我一直在互联网上寻找2小时,以完全理解唯一键,主键,唯一索引等之间的差异,但它无法帮助我解决我应该使用什么键/约束/索引的问题使用

我正在改变SQL Server Management Studio中的表。我改变名字字段的问题是:我应该使用“Type = Index”和“Is Unique = Yes”还是使用“Type = Unique Key”?

提前致谢!

亲切的问候, 阿巴斯

3 个答案:

答案 0 :(得分:6)

唯一键和主键都是逻辑约束。它们都由唯一索引支持。参与主键的列不允许NULL - 能够。

从创建外键的角度来看,唯一索引是重要的,因此所有三个选项都可以使用。

基于约束的索引存储了常规索引不存储的其他元数据(例如create_date中的sys.objects)。创建一个基于非约束的唯一索引可以允许更大的灵活性,例如它允许您在索引定义中定义包含的列(我认为可能还有一些其他的东西)。

答案 1 :(得分:2)

unique key不能与表中列的任何其他行具有相同的值。 primary keyunique keynot null的列字段,用作主要查找机制(意味着每个表都应该有一个primary key表示唯一条目的列或列组合。

我没有真正使用索引,但我相信它遵循相同的逻辑。

有关详细信息,请参阅http://en.wikipedia.org/wiki/Unique_key

答案 2 :(得分:1)

索引是DBMS用于有效组织表数据的集合。通常,您希望在经常搜索的列和列组上创建索引。例如,如果您有一个列'name',并且您正在搜索您的表名,其中name ='?'并且该列上的索引将创建单独的存储,该命令对该表进行排序,因此按名称搜索记录的速度很快。通常,主键会自动编入索引。

当然上面的内容有点过于笼统,你应该考虑在添加索引之前和之后对查询进行分析,以确保它被使用并加快速度。对于使应用程序具体化的索引,有一些微妙之处。他们需要额外的存储空间和时间进行构建和维护,因此您总是希望能够明智地添加它们。

希望这有帮助。