2011-10-05 156 views
2

我有一个相当愚蠢的问题。我将简化这种情况:我在SQL Server 2008 R2中有一个表,其中有一个字段“ID”(int,PK)和一个名称(nvarchar(50))和Description(文本)字段。名称字段中的值应该是唯一的。在搜索表格时,名称字段将被使用,因此性能是关键。'唯一'的唯一密钥或索引

我一直在网上寻找2个小时来完全理解唯一键,主键,唯一索引等之间的差异,但它并没有帮助我解决我关于什么键/约束/索引的问题应该使用。

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

在此先感谢!

亲切的问候,阿巴斯

回答

6

唯一键和主键都是逻辑约束。它们都由一个独特的索引来备份。参与主键的列不允许为NULL -able。

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

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

+1

+1逻辑vs物理 – onedaywhen

2

一个​​不能有相同的值列在表中的任何其他行。 A primary key是用作主查找机制的​​和not null的列字段(意味着每个表应该具有作为表示唯一条目的列或列组合的primary key)的列。

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

查看http://en.wikipedia.org/wiki/Unique_key了解更多信息。

1

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

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

希望这会有所帮助。