在具有两个外键条件的两列表上分配聚簇索引

时间:2015-04-13 15:52:55

标签: sql-server database tsql database-design indexing

我有一个包含两列的表,这两列都是int数据类型而不是null。

A列是主键,作为多对一关系被引用为另一个表中的外键。

B列是一个外键,它引用另一个具有多对一关系的表。

用户永远不会直接查询A列,它只会用作连接。查询通常使用B列,特别是在where子句中。

聚集索引的最佳选择是什么?在一个较大的表中,我可能会使主键非聚集并在B列上放置一个聚簇索引,这会因为列数较少而不同吗?

该表格将每月更新一次,数据集相对较小。

2 个答案:

答案 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。