【问题标题】:Unique Key or Index with 'Is Unique'带有“唯一”的唯一键或索引
【发布时间】:2011-10-05 13:02:57
【问题描述】:
我遇到了一个相当愚蠢的问题。我将简化情况:我在 SQL Server 2008 R2 中有一个表,其中有一个字段“ID”(int,PK)和一个名称(nvarchar(50))和说明(文本)字段。 Name - 字段中的值应该是唯一的。搜索表格时,将使用名称 - 字段,因此性能是这里的关键。
我在互联网上找了 2 个小时来完全理解唯一键、主键、唯一索引等之间的区别,但这并不能帮助我解决我应该使用什么键/约束/索引的问题使用。
我正在更改 SQL Server Management Studio 中的表。我更改 Name - 字段的问题是:我应该使用“Type = Index”和“Is Unique = Yes”还是使用“Type = Unique Key”?
提前致谢!
亲切的问候,
阿巴斯
【问题讨论】:
标签:
sql
sql-server-2008-r2
ssms
【解决方案1】:
唯一键和主键都是逻辑约束。它们都由唯一索引支持。参与主键的列不允许为NULL-able。
从创建外键的角度来看,唯一索引很重要,因此所有三个选项都可以使用。
基于约束的索引存储了常规索引没有的附加元数据(例如sys.objects 中的create_date)。创建基于非约束的唯一索引可以提供更大的灵活性,例如,它允许您在索引定义中定义包含的列(我认为可能还有其他一些东西)。
【解决方案2】:
unique key 不能与表中列的任何其他行具有相同的值。 primary key 是作为 unique key 和 not null 的列字段,用作主要查找机制(这意味着每个表都应该有一个 primary key 作为一列或表示的列组合唯一的条目)。
我并没有真正使用过索引,但我相信它遵循相同的逻辑。
更多信息请参见http://en.wikipedia.org/wiki/Unique_key。
【解决方案3】:
索引是 DBMS 用来有效组织表数据的集合。通常,您希望为经常搜索的列和列组创建索引。例如,如果您有一个列“名称”并且您正在搜索名称 =“?”的表。并且该列上的索引将创建对该表进行排序的单独存储,因此按名称搜索记录很快。通常,主键会自动编制索引。
当然,以上内容有点过于笼统,您应该考虑在添加索引之前和之后分析查询,以确保它被使用并加快速度。使应用程序特定的索引有一些微妙之处。它们需要额外的存储空间和时间来构建和维护,因此您始终需要谨慎添加它们。
希望这会有所帮助。