我對兩個設計的性能有疑問。目標是存儲多種類型的實體,他們共享一些屬性,但也有所不同。SQL Server:UNION ALL vs將所有列合併到一個表中
方法1:多個表,每個建模一個實體
Entity1 - C1, C2, C3
Entity2 - C1, C2, C4
Entity3 - C1, C2, C5
要查詢,我需要對所有表執行UNION ALL
。
方法2:單表中的所有列和類型列
All - Type, C1, C2, C3, C4, C5
在這裏,我可以列上直接查詢。
問題是UNION ALL
方法是否有任何性能問題?這個問題與PostsgreSQL上的previously asked question類似,但尚未得到解答。
編輯:
謝謝你的所有答案。
實體表爲日期索引。查詢大部分時間都是日期過濾的,或者過濾了共享字段。假設C1是一個日期,C2是一個字符串,95%的查詢看起來像C1> = from和C1 < = to或C2 ='SomeId'。
記錄數增長緩慢,可能每個實體每天幾百個。列數不會超過150.但是,共享列數很少。目前我已經實現了方法1,因爲每個實體都可以使用除共享之外的字段作爲主鍵。這樣的約束更自然。
您可能想要考慮一個eva模式。 http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model –
根據我的經驗,聯合查詢比較慢,所以單個表的速度應該一般。你打算做很多類型特定的過程嗎?他們實際分享的數據有多少?如果你把它們放在一起,會不會有任何尺寸問題? – PowerUser
@Declan_K,EAV模式是所有世界中最糟糕的。除非你絕對不能提前定義你需要的文件,否則應該避免。這兩種方法都應該比EAv appraoch表現得更好,並且更易於查詢。 – HLGEM