SQL非聚集索引

时间:2010-08-13 00:37:37

标签: sql sql-server tsql indexing

我有一个表将用户的权限映射到给定对象。因此,它本质上是3个不同表的连接表。 (对象,用户和权限)

对于所有3列,每行的值始终是唯一的,但不是任何2列。

我需要创建一个非聚集索引。我想把索引放在对象和用户的外键上,但我想知道是否应该把它放在所有3列上。

2 个答案:

答案 0 :(得分:1)

“每行的值对于所有3列始终是唯一的”

您可能有兴趣知道SQL Server唯一约束是作为索引实现的。因此,如果你有(或想要)一个约束来支持你的独特声明,那么你已经拥有了所有3的索引。

CREATE UNIQUE NONCLUSTERED INDEX idx_unique_perms ON UserPermissions
(
    ObjectId ASC,
    UserId ASC,
    PermissionID ASC
)

如果您制作一个,请记住订购色谱柱以获得高选择性。

答案 1 :(得分:0)

如果您有疑问,请制定您打算针对这些表执行的查询,并运行SSMS查询调优向导。这应该可以帮助你开始正确的方向。

要考虑的一件事是这三个表中的行数。如果行计数很小,甚至可能不值得添加索引。无论如何都可能会进行表扫描。