我有一个表将用户的权限映射到给定对象。因此,它本质上是3个不同表的连接表。 (对象,用户和权限)
对于所有3列,每行的值始终是唯一的,但不是任何2列。
我需要创建一个非聚集索引。我想把索引放在对象和用户的外键上,但我想知道是否应该把它放在所有3列上。
答案 0 :(得分:1)
“每行的值对于所有3列始终是唯一的”
您可能有兴趣知道SQL Server唯一约束是作为索引实现的。因此,如果你有(或想要)一个约束来支持你的独特声明,那么你已经拥有了所有3的索引。
CREATE UNIQUE NONCLUSTERED INDEX idx_unique_perms ON UserPermissions
(
ObjectId ASC,
UserId ASC,
PermissionID ASC
)
如果您制作一个,请记住订购色谱柱以获得高选择性。
答案 1 :(得分:0)
如果您有疑问,请制定您打算针对这些表执行的查询,并运行SSMS查询调优向导。这应该可以帮助你开始正确的方向。
要考虑的一件事是这三个表中的行数。如果行计数很小,甚至可能不值得添加索引。无论如何都可能会进行表扫描。