在具有两个外键条件的两列 table 上分配聚簇索引
Assigning a clustered index on a two column table with two foreign key conditions
我有一个 table,它有两列,都是 int 数据类型而不是 null。
A 列是主键,被引用为多对一关系,就像另一个外键一样table。
B 列是外键,通过多对一关系相互引用 table。
用户永远不会直接查询A列,它只会用作连接。查询通常会使用 B 列,尤其是在 where 子句中。
聚簇索引的最佳选择是什么?在更大的 table 中,我可能会使主键成为非聚集索引,并在 B 列上放置一个聚集索引,如果列数较少,这会有所不同吗?
table 将每月更新一次,数据集相对较小。
您没有告诉我们足够的列信息,无法真正决定使用哪一个。聚集索引列的最佳选择是占用最少空间的列,尽可能唯一(SQL 服务器将在必要时使它们唯一)并且非常重要,以避免页面拆分,正在增加.
由于 A 列是被其他 table 引用的主键,我假设它不会经常更改(可能根本不会更改)。还考虑到它是一个 int 列,它可能是聚集索引的不错选择。参见 http://www.sqlskills.com/blogs/kimberly/ever-increasing-clustering-key-the-clustered-index-debate-again/
我还会在列 B 上创建一个非聚集索引,尤其是当它具有高基数时。但即使基数是中等,索引在 B 列上仍然有用,以便在有人试图从引用的 table.
中删除某些内容时更快地检查 FK。
我有一个 table,它有两列,都是 int 数据类型而不是 null。
A 列是主键,被引用为多对一关系,就像另一个外键一样table。
B 列是外键,通过多对一关系相互引用 table。
用户永远不会直接查询A列,它只会用作连接。查询通常会使用 B 列,尤其是在 where 子句中。
聚簇索引的最佳选择是什么?在更大的 table 中,我可能会使主键成为非聚集索引,并在 B 列上放置一个聚集索引,如果列数较少,这会有所不同吗?
table 将每月更新一次,数据集相对较小。
您没有告诉我们足够的列信息,无法真正决定使用哪一个。聚集索引列的最佳选择是占用最少空间的列,尽可能唯一(SQL 服务器将在必要时使它们唯一)并且非常重要,以避免页面拆分,正在增加.
由于 A 列是被其他 table 引用的主键,我假设它不会经常更改(可能根本不会更改)。还考虑到它是一个 int 列,它可能是聚集索引的不错选择。参见 http://www.sqlskills.com/blogs/kimberly/ever-increasing-clustering-key-the-clustered-index-debate-again/
我还会在列 B 上创建一个非聚集索引,尤其是当它具有高基数时。但即使基数是中等,索引在 B 列上仍然有用,以便在有人试图从引用的 table.
中删除某些内容时更快地检查 FK。