我有一个包含两列的表,这两列都是int数据类型而不是null。
A列是主键,作为多对一关系被引用为另一个表中的外键。
B列是一个外键,它引用另一个具有多对一关系的表。
用户永远不会直接查询A列,它只会用作连接。查询通常使用B列,特别是在where子句中。
聚集索引的最佳选择是什么?在一个较大的表中,我可能会使主键非聚集并在B列上放置一个聚簇索引,这会因为列数较少而不同吗?
该表格将每月更新一次,数据集相对较小。
答案 0 :(得分:0)
你没有告诉我们关于真正决定使用哪一列的列。聚簇索引列的最佳选择是占用空间最少的列,尽可能唯一(SQL Server将在必要时使它们唯一)并且非常重要,以避免页面拆分,正在增加。
答案 1 :(得分:0)
由于列A是其他表引用的主键,我假设它不会经常更改(可能它根本不会被更改)。另外考虑到它是一个int列,它可能是聚簇索引的一个很好的选择。见http://www.sqlskills.com/blogs/kimberly/ever-increasing-clustering-key-the-clustered-index-debate-again/
我还会在B列上创建一个非聚集索引,特别是如果它具有高基数。但即使基数是中等的,索引在B列上仍然有用,以便在有人试图从引用的表中删除某些内容时更快地检查FK。