据我所知,聚集索引的一个优点是,如果它是索引列的一部分,因为行被“关闭”存储,那么在那里寻找某些东西会更快。由于 SQL Server 自动将主键设置为“聚集索引”,因此将聚集索引用于像代理键这样没有意义的东西是否会消除这种优势,而我应该将自然键作为聚集索引?
最佳答案
这里没有正确或错误的答案,视情况而定。聚类的优点,例如,作为主键的 IDENTITY 列,相对于其他东西的聚类,包括:
INT
是 4 个字节(如果使用数据压缩则更少)。所以当你有引用这个表的子表时,主键是瘦的非常有用,这样子表中的重复信息也是瘦的。将它聚集起来并没有太大的影响,但它似乎是一种手动解决方案,即为聚集索引使用自然键,然后使用非聚集代理键执行到子表的连接。在我见过的大多数解决方案中,代理是聚集的(并分布在整个模型中),并且自然键只是简单地唯一。 你是否有更好的聚类键候选,谁知道呢?我们不知道您的应用程序,甚至不知道您为自然键考虑的数据类型。什么是数据模型?什么是自然键?有可能改变吗?它很大吗?它真的独一无二吗?
顺便说一句,我喜欢认为 SQL Server 创建了
PRIMARY KEY
如 CLUSTERED
默认情况下,因为 (a) 大多数表应该有一个聚集索引和 (b) 在大多数情况下,键应该是聚集的(但不是全部!)。
关于sql-server - 我应该从代理键中删除聚集索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18623671/