sql-server - SQL Server 2008 中的索引与唯一键

标签 sql-server indexing

我有下表用于连接 3 个表:

ClientID int
BlogID  int
MentionID   int

假设查询总是来自 ClientID,我可以创建 1 个多列索引(ClientID、BlogID、MentionID)。

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

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

谁能告诉我每种方式的优点?

最佳答案

聚集索引是“表本身”,即 inode 按树状排列,其叶子节点包含行数据。聚簇索引不必声明为唯一的(尽管通常是唯一的);如果它不是唯一的,则服务器隐式地向该索引添加一个“uniqalizer”,以便每一行都被唯一标识。

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

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

关于sql-server - SQL Server 2008 中的索引与唯一键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4172974/

相关文章:

MySQL BETWEEN 查询 - 哪一部分使用索引?

sql-server - 用于连接到 Ubuntu 上的 SQL Server 的连接字符串

c# - Linq中的 "SELECT SYSTEM_USER"相当于什么

SQL 条件字符串在Where 子句中进行比较

mysql - 我应该为同一列创建 2 个索引来加速连接吗?

mysql - 我可以使用多个字段作为 MySQL 中的 IGNORE 限定符来执行 INSERT IGNORE 吗?

sql - 您应该将 SQL 存储过程存储在源代码管理中吗?

c# - 插入,选择,删除的SQL Server死锁

wordpress - 指向停放域的内部链接 + SEO

python - 替换numpy中的子数组