在報告中,我有下從事實表聯接:DW可以接受左連接嗎?
加入...
LEFT JOIN DimState AS s
ON s.StateCode = l.Province AND l.Locale LIKE (s.CountryCode + '%')
的更多信息: 事實表中有59567773行
L.Province可以匹配DimState一個StateCode :42,346,471行71%
L.Province無法匹配DimState中的StateCode:13,742,966行23%(其中大多數是L.Province中的空白值)。
L.Province爲NULL在350萬行(6%)
4個問題: 做-The正確的事情,將取代L.Province空白和空白的「其他」 ......而有一個入口在DimState中,StateCode爲「其他」,對吧?
-IS它接受的左連接於一個維度?或者它應該永遠是INNER JOIN?
-is它正確加入到一個維度上的2列?
- 要做到一個l.Locale = s.CountryCode ......我應該修改l.Locale或s.CountryCode值是多少?
你問這些問題,就好像他們有明確的答案,被衆神判斷是正確的。他們不。 「可接受的」是可以達到理想程度的效率。目前的解決方案是否會產生實際問題如果你的問題是「如何過渡這個數據庫,以至於只需要一個列上的'INNER JOIN'」,那就是另一回事了,但是因爲它的問題完全是主觀的。或者可能是數據庫模式審查的候選人(我不確定是否有SE上的主題網站 - dba.SE可能有資格)。 –
我謙虛地認爲他們確實有確定的答案。我不熟悉最佳實踐,但是如果有人確認事實表不應該有空值或空值,那麼就會回答#1。 #2只是一個有DW經驗的人,如果他/她同時看到了LEFT和INNER,我會懷疑LEFT JOINs會影響性能。 #3再次,有DW經驗的人,如果他/她通常加入一個或兩個專欄,以及DW中的標準是什麼。 #4我應該修改事實還是維度,在這些情況下通常是什麼? – Chicago1988
@ Chicago1988數據倉庫的標準做法是在事實表中不要使用維值鍵的NULL值。每個維度都應該有一些預留的成員,然後用它們來指示源數據中的NULL或空白數據。 – mallan1121