我有一个相当愚蠢的问题。我将简化这种情况:我在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”?
提前致谢!
亲切的问候, 阿巴斯
答案 0 :(得分:6)
唯一键和主键都是逻辑约束。它们都由唯一索引支持。参与主键的列不允许NULL
- 能够。
从创建外键的角度来看,唯一索引是重要的,因此所有三个选项都可以使用。
基于约束的索引存储了常规索引不存储的其他元数据(例如create_date
中的sys.objects
)。创建一个基于非约束的唯一索引可以允许更大的灵活性,例如它允许您在索引定义中定义包含的列(我认为可能还有一些其他的东西)。
答案 1 :(得分:2)
unique key
不能与表中列的任何其他行具有相同的值。 primary key
是unique key
和not null
的列字段,用作主要查找机制(意味着每个表都应该有一个primary key
表示唯一条目的列或列组合。
我没有真正使用索引,但我相信它遵循相同的逻辑。
有关详细信息,请参阅http://en.wikipedia.org/wiki/Unique_key
。
答案 2 :(得分:1)
索引是DBMS用于有效组织表数据的集合。通常,您希望在经常搜索的列和列组上创建索引。例如,如果您有一个列'name',并且您正在搜索您的表名,其中name ='?'并且该列上的索引将创建单独的存储,该命令对该表进行排序,因此按名称搜索记录的速度很快。通常,主键会自动编入索引。
当然上面的内容有点过于笼统,你应该考虑在添加索引之前和之后对查询进行分析,以确保它被使用并加快速度。对于使应用程序具体化的索引,有一些微妙之处。他们需要额外的存储空间和时间进行构建和维护,因此您总是希望能够明智地添加它们。
希望这有帮助。