【发布时间】:2011-04-06 21:07:52
【问题描述】:
我正在创建一个强大的日期表,想知道链接到它的最佳方式。主键聚集索引将位于名称为 DateID 的智能日期整数键(根据 Kimball 规范)上。到目前为止,我一直在像这样对它进行查询:
select Foo.orderdate -- a bunch of fields from Foo
,DTE.FiscalYearName
,DTE.FiscalPeriod
,DTE.FiscalYearPeriod
,DTE.FiscalYearWeekName
,DTE.FiscalWeekName
FROM SomeTable Foo
INNER JOIN
DateDatabase.dbo.MyDateTable DTE
ON DTE.date = CAST(FLOOR(CAST(Foo.forderdate AS FLOAT)) AS DATETIME)
请记住,日期是一个非聚集索引字段,其值如下: 2000-01-01 00:00:00.000
我突然想到,由于我有一个聚集整数索引 (DATEID),也许我应该转换我的数据库字段中的日期时间以匹配它并基于该字段进行链接。
大家怎么看?
另外,根据您的第一个答案,如果我通常从日期表中提取这些字段,我该如何优化这些字段的检索?覆盖指数?
【问题讨论】:
-
作为我的一般规则(通过艰难的方式学习),我总是避免使用日期时间主键。使用相同的值很容易被烧毁。
-
您介意详细说明一下吗?
-
如果您有一个日期时间值的主键,并且您使用 GETDATE() 创建它,那么当多人尝试同时插入时,您迟早会遇到 dup 键失败。或者,如果您从 select 语句中插入,则更容易导致 dup 失败。
标签: tsql indexing sql-server-2000 performance