包括从聚簇索引到非聚簇的列?

时间:2016-10-26 21:14:51

标签: sql sql-server tsql indexing

我正在构建一个数据库来编译来自40个不同服务器的数据。这些服务器都具有相同的设计,但使用的是专用于单个位置的平台(因此每个位置不需要识别ID)。我为每个位置创建了已编译数据的密钥,但由于这几乎所有表都有复合主键,其设计如下:

LocationID, TransactionID, CustomerID, ServiceID, TransDate, Amount

LocationID, CustomerID, FirstName, LastName, Balance

列。

我的问题是,关于我的非聚集索引。如果我计划在LocationID表上的CustomerID上创建索引,即使Transaction位于群集中,也最好包含LocationID列表的关键已经?

希望有意义,提前谢谢!

1 个答案:

答案 0 :(得分:0)

群集实际上是关于如何在完成所有操作后检索数据。如果您要根据CustomerIDLocationID检索数据,那么您可能希望将这些数据包含在某种索引中。但问题是你必须1)加载你的数据,这可能最终重新平衡你的聚集索引(即,如果你在加载LocationID 2之前加载LocationID 2 1),然后2)定义您的查询以在所有内容中包含LocationID

我的直觉是,在保留您已有的相同数据结构的同时重新键入所有内容更加清晰,而不是尝试将LocationID合并到每个表和每个查询连接中。是否更容易......好吧,我认为简单地重新键入传输中的数据可能更容易,而不是改变整个架构。简单地添加LocationID可能似乎,但我怀疑它会咬你,特别是在外部联接查询和&比简单的equijoins更微妙的东西。