我有一個要求,在我的數據庫表中有612列。按數據類型列的#是:從一張繁重的表中DB設計和數據檢索
BigInt有 - 150(PositionCol1,PositionCol2 ............ PositionCol150)
INT - 5
SMALLINT - 5
日期 - 150(SourceDateCol1 ,SourceDate2,............ .SourceDate150)
日期時間 - 2
VARCHAR(2000) - 150(FormulaCol1,FormulaCol2 ... ............ FormulaCol150)
位 - 150(IsActive1,IsActive2,.................. .IsActive150)
當用戶執行用於導入第一次得到的數據存儲在PositionCol1,SourceDateCol1,FormulaCol1, IsActiveCol1等(其他日期時間,Int,Smallint列)。
當用戶執行導入的數據被存儲在PositionCol2,SourceDateCol2,FormulaCol2,IsActiveCol2等。(其他日期時間,INT,SMALLINT列)第二次... ..等等等等。
表中有一個ProjectID列正在導入數據。
在開始導入過程之前,用戶將excel列名與數據庫列名(PositionCol1,SourceDateCol1,FormulaCol1,IsActiveCol1)進行映射,並將此映射存儲在單獨的表中;這樣當檢索到的數據可以顯示在這些映射列名下面而不是數據庫列名時。例如。
PositionCol1可以被映射到SAPDATA
SourceDateCol1可以被映射到SAPDATE
FormulaCol1可以被映射到SAPFORMULA
IsActiveCol1可以被映射到SAPISACTIVE
40000行將在加入這張表每天都有,我的問題是,SQL能夠處理長期大量數據的負載嗎?
大多數時候,一行將有大約200-300列的數據;在最壞的情況下,它會在所有612列中有數據。爲保持這一點,我是否應該對設計進行一些更改以避免將來的性能問題?如果是這樣,請提出可以做些什麼?
如果我堅持我目前的設計,除了索引之外,我應該關注哪些要在從這張巨大的表中檢索數據時獲得最佳性能?
如果我需要檢索特定實體的數據,例如SAPDATA,我必須去我的映射表,在這種情況下獲取數據庫列名稱對SAPDATA,即PositionCol1;並檢索它。但是,這樣,我將不得不編寫動態查詢。還有其他更好的方法嗎?
我已經用建議的設計燒了我的手指,因爲在動態查詢的幫助下,行必須旋轉到許多列的列中。所以,如果你有大量的數據,那麼這種設計是行不通的。 – user899055
而且這些列是固定的,它們不會增加。另外,由於數據的存儲方式與我想要的方式相同,所以數據回覆速度非常快,因爲它不需要執行關鍵操作。 – user899055
當你說「每天40,000行」時,有多少人會「活躍」?這是歷史數據嗎?您可以在大多數現代RDBMS中對數據進行分區,以最大限度地降低對性能的影響(取決於您的查詢的結構)。您可能需要考慮一個數據倉庫解決方案,因爲a)它可以幫助您瞭解您所建議的結構(即保持您的查詢簡單快捷),並且b)減少實時系統的負載。但是我並沒有真正理解你的用例,以便能夠提出可靠的建議。 –