2016-07-05 33 views
0

我正在設計一個每天添加1M行的特殊SQL Server表。該表格分爲3個階段。這意味着實體生命週期有4個狀態:需要3個階段填充行的大表的物理設計幫助

  • 狀態1:插入新行並填充列1-15。其餘列保持爲NULL。

  • 狀態2:更新(填充)的列16-25

  • 狀態3:更新(填充)的列26-40

  • 狀態4:該行可以用於報告進行處理。

上述要求強加以下低效:

創建每一行之後,因爲它們填充
  • 列16-40的一切都必須爲空。
  • 由於在創建每行之後至少有兩組NULL列被拼接(更新),所以會出現很多碎片 - 我假設對不對?

我打算把這個實體分解成3個表格,但是,如果我這樣做,那麼我需要在報告過程中保持連接3個表格。 是否有任何技術或模式可以幫助我使此表更高效?

回答

-1

我們有類似的情況,其中第1-3列組成數據集的唯一鍵,第4-100列是表數據。

基本上,我們把它分成: 1),它保存3列的唯一密鑰保存鍵 - 值對的表格,以及一個ID柱(日期,身份等視需要) 2)表列名稱/編號和列值和FK到ID表1.

表1

ID | Date  | Col1 | Col2 | Col3 
1 | 1/5/2016 | USA | USD | TRUE 
2 | 1/5/2016 | UK | GBP | TRUE 
3 | 1/5/2016 | UK | EUR | FALSE 
4 | 1/6/2016 | USA | USD | TRUE 

表2

ID | Column_No | Value 
1 | 16  | 53 
1 | 17  | Greenback 
1 | 18  | Chicago 
2 | 16  | 1.3 
2 | 23  | Leeds 
3 | 16  | 2.8 
3 | 18  | Manchester 
3 | 26  | 643 
3 | 33  | MThatcher 
3 | 34  | Union Jack 

有AR e要考慮很多事情;用戶如何查詢數據集,獲取更新的方式,是否需要保存歷史記錄等。這將幫助您瞭解表格設計和索引。

這是一個過於簡化的答案,但可能會指出你在正確的方向。

+0

您解釋的想法在偶爾使用(填充)列時效果很好。這裏的要求是不同的。所有行列都被填充。問題是它們不在INSERT時間填充,並且有後續更新。順便說一句,對於你解釋的情況,你應該看看稀疏列。 –