【问题标题】:Including column from clustered index into nonclustered?将聚集索引中的列包含到非聚集索引中?
【发布时间】:2016-10-26 21:14:51
【问题描述】:

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

LocationID, TransactionID, CustomerID, ServiceID, TransDate, Amount

LocationID, CustomerID, FirstName, LastName, Balance

对于列。

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

希望这是有道理的,在此先感谢!

【问题讨论】:

  • 如果表上的聚集键包含LocationID,则默认包含在所有非聚集索引中。
  • 一些有用的阅读here

标签: sql sql-server tsql indexing


【解决方案1】:

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

我的直觉是,在保留现有数据结构的同时重新键入所有内容会更干净,而不是尝试将 LocationID 合并到每个表和每个查询连接中。无论是否更容易......好吧,我认为简单地重新键入传输中的数据而不是更改整个架构可能更容易。简单地添加LocationID 可能似乎简单,但我怀疑它会咬你,特别是在外连接查询和比简单等值连接更细微的事情上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 2013-08-07
    • 2011-04-05
    • 2011-06-02
    • 1970-01-01
    相关资源
    最近更新 更多