首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server 2008中的索引与唯一键

Server 2008中的索引与唯一键
EN

Stack Overflow用户
提问于 2010-11-13 14:25:29
回答 5查看 2.1K关注 0票数 2

我有下面的表格,用于连接3个表:

代码语言:javascript
复制
ClientID int
BlogID  int
MentionID   int

假设查询总是通过ClientID提供的,我可以创建一个多列索引(ClientID、BlogID、MentionID)。

问题是,是将其创建为聚集索引还是作为唯一键创建呢?据我所知,聚集索引将数据存储在其叶节点上。当然,在这种情况下,索引数据,所以我不知道Server是否会复制数据。尽管如此,我在MSDN上找不到任何关于使用“唯一键”的重要性的东西。

这与Type = Index & IsUnique = yes有什么不同?

有人能告诉我每一种方式的优点吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-11-13 15:03:07

你似乎在问以下几个方面的区别:

代码语言:javascript
复制
 MYTABLE
 id integer primary key autoincrement
 clientid integer
 blogid integer
 mentionid integer
 -- with a unique composite index on (clientid, blogid, mentionid) and three foreign key constraints

代码语言:javascript
复制
 MYTABLE
 clientid 
 blogid
 mentionid
 -- with a composite primary key on (clientid, blogid, mentionid) and three foreign key constraints

代码语言:javascript
复制
 MYTABLE
 id integer primary key autoincrement
  clientid integer
  blogid integer
  mentionid integer
  with an index on clientid and also an index on blogid and the three foreign key constraints

首先,在整数主键上有索引,在三位一体上也有可选的唯一索引。如果是第二个,则只有三进主键上的唯一索引。在第三部分中,整数主键上有一个唯一的索引,还有另外两个非唯一索引,一个在clientid上,另一个在blogid上。

第二种方案的效率稍高,其性能增益将是极小的,因此我将根据其他因素作出决定。第三种方法在查询方面是最灵活的,并且提供了更简单的编码;它提供了客户机和博客上的索引的好处,如果您想在WHERE子句中使用blog而不是client进行查询的话。至于编码,一些GUI工具和中间件在多部分主键方面有问题,当您的更新/插入/删除逻辑必须处理单个整数PK列时,它将变得更简单。我发现,代码简单和易于维护比几秒钟或仅仅几秒钟的查询响应时间的改进要好得多。

票数 1
EN

Stack Overflow用户

发布于 2010-11-13 14:55:41

聚集索引是“表本身”,即索引节点排列在一棵树中,其叶节点包含行数据。聚集索引不必声明为唯一的(尽管它通常是唯一的);如果它不是唯一的,则服务器将向该索引隐式添加一个"uniqalizer“,从而使每一行都被唯一标识。

其他索引将聚集索引值存储为它们的叶节点(如果其他列包含在中的INCLUDE子句中,则可能还存储一些其他列)。

任何索引都可能被取消为唯一索引,因此服务器将执行额外的检查,以防止重复值进入表中。

票数 4
EN

Stack Overflow用户

发布于 2010-11-13 14:39:23

  • A unique indexunique keyunique constraint基本上是一样的。它们产生一个强制执行uniqueness.
  • Clustered的索引,这意味着索引本身成为表本身。有一个聚集索引是很好的,否则该表挂在无序堆中。

唯一和聚类是不相关的属性。你可以用任何你喜欢的方式组合它们。所以在你的例子中,我会创建一个唯一的聚集索引。通常的方法是将索引创建为clustered primary key

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4172974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档