我正在創建一個可靠的日期表,以瞭解鏈接到它的最佳方式。主鍵集羣索引將在名稱爲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),也許我應該將數據庫字段中的日期時間轉換爲匹配它並基於該字段進行鏈接。
你們有什麼想法?
此外,根據您的第一個答案,如果我通常從日期表中拉出這些字段,我該如何優化這些字段的檢索?覆蓋指數?
作爲我的一般規則(學會了艱難的道路),我總是避免使用日期時間主鍵。您可以輕鬆地使用相同的值進行刻錄。 – 2010-09-01 15:25:58
你介意說明一下嗎? – DavidStein 2010-09-01 15:51:32
如果您有一個主鍵是日期時間值,並且您使用GETDATE()創建它,那麼當多個人嘗試同時插入時,您遲早會得到一個複製鍵失敗。或者,如果您從select語句插入,則更容易發生dup重複失敗。 – 2010-09-01 17:25:44