【发布时间】:2014-05-02 05:47:48
【问题描述】:
我在 SQL Server 2012 中使用具有以下结构的事实表:
CREATE TABLE [dbo].[factTable] (
[Id] BIGINT IDENTITY (1, 1) NOT NULL,
[Date] DATE NOT NULL,
[MinuteNumber] SMALLINT NOT NULL,
[CityId] INT NOT NULL, /* Foreign key to dimCity */
[Value] DECIMAL(12, 4) NULL
)
我在Date 列上有一个聚集索引,填充因子为 100。插入此表的数据几乎总是按Date 和MinuteNumber 的升序排列。
我想知道 - 在给定的场景中是否需要使用 Id 列?它有任何性能影响吗?或者我可以安全地消除它吗?
我还想知道在
Date列上是否有聚集索引是否足够(会有许多记录具有相同的日期,甚至相同的日期和相同的分钟数)还是有一个聚集索引更好索引组合多列;两种方法对性能和存储的影响是什么?
我是新手,我们将不胜感激。
【问题讨论】:
-
在这种情况下,如果您的日期列具有相似的数据,则您创建了一个非唯一聚集索引。我宁愿建议在 ID 列上使用聚集索引,然后您可能可以在 date+city-id 上创建一个唯一的非聚集索引
-
通常在数据仓库中,将事实表链接到日期和城市等维度表更有意义。这使 DimDate 表能够保存诸如年、月、星期几、季度之类的值等,并允许更大的灵活性和易于查询。维度表的键值通常只是表示为整数的日期,例如今天是 20140502。这方面有很多文章和一些好书,例如 Kimball 的 microsoft datawarehouse toolkit。
标签: sql sql-server database data-warehouse fact-table