我有一个由两个字段组成的复合键的表:A
和B
。
A
就像用户 ID 或机器 ID,它是全局唯一的。B
只有几个可能的值(小于 5)。组合键的样子(user1 + B1)
,(user2 + B1)
,(user3 + B1)
,(user1 + B2)
等我不希望通过向数据转换成几桌分裂B
以来的行数还没有达到那个量呢。
为了获得最佳查找性能,主索引中字段的顺序应该是什么?AB
或者BA
?
对于在两列上进行相等查找的查询,这无关紧要。您需要查看其他查询,以了解它们如何从这两种可能性中受益。
例如,(A,B) 上的索引也可以用于 A 上的相等搜索,但不能用于 B 上的相等搜索。
此外,如果您在查询中使用 ORDER BY A,B,那么 A,B 上的索引可以避免排序。
你说你没有这样的查询,并且使用两列都是严格相等的。
作为决胜局,您可能会考虑哪个前导列将成为最有用的直方图,但是对于您描述的查询模式,除了一起查找唯一索引中的键之外,A 或 B 都不会被查询,两者都没有用。
所以在你的情况下没关系。
顺便说一句:人们一直认为需要将最具选择性的列放在首位。
这在这里没有任何区别。无论哪种方式,SQL Server 都可以在两列上查找。与评论中链接的 StackOverflow 答案相反,两种方式的效率都没有太大差异(我想通过首先检查最有可能不同的列,CPU 时间可能会有一点好处,从而可能避免需要对复合键中的第二个键列,但即使为真,这也将是微优化)
有时这对于工作负载中的其他查询是有意义的。例如,如果分别针对 A 和 B 进行查询,并且索引未涵盖其中任何一个,但其中一列的选择性足以制定值得进行查找的计划,那么在这种情况下,将最具选择性的放在首位是有意义的。
归档时间: |
|
查看次数: |
3319 次 |
最近记录: |