2010-09-28 54 views
0

我正在開發一個執行多個並行作業的作業應用程序。每項工作都會從第三方來源和流程中提取數據。最低記錄是100,000。所以我爲每個作業創建新表(如Job123 123是jobId)並處理它。當工作開始時,它將清除舊記錄並獲得新記錄和處理。現在問題是我有1000個工作,而DB有1000個工作表。由於大量表格,數據庫大小急劇增加。爲數據庫性能選擇表設計

我的問題是,是否可以爲每個作業創建新表。或者只有一個名爲Job的表並具有列jobId,然後輸入數據並對其進行處理。唯一的問題是每項工作都會有超過100,000條記錄。如果我們只有一個表,數據庫性能是否會受到影響?

請讓我知道哪種方法更好。

回答

1

不要創建所有這些表!儘管它可能有效,但是性能會受到很大影響。

有一張大桌子很好,這是數據庫的用途。但是...我懷疑你不需要100萬持續記錄,你呢?看起來你一次只能處理一個Job,但目前還不清楚。

編輯

該數據庫將增長到所需的尺寸最大,但是從已刪除的記錄空間被重用。如果您添加100k條記錄並一次又一次地刪除它們,數據庫將不會持續增長。但即使在刪除之後,它也會佔據與10萬條記錄一樣多的空間。

+0

是的。它只是暫時的。但是有時候工作會不完整,那時我會存儲數據,所以工作會從剩下的地方重新開始。
如果我們繼續添加和刪除數據庫大小會增加儀式?我們如何使這種縮小自動化? – jaks 2010-09-28 20:07:41

0

我建議所有作業都使用一張大型表格。每種事物應該有一張桌子,而不是每張桌子都有一張桌子。

如果您將作業ID設置爲聚簇索引中的第一個字段,則SQL Server將使用b樹索引來確定表中數據的物理順序。原則上,由於物理排序順序,數據將按作業ID自動進行物理分組。由於存在碎片,這可能不會永遠保持真實,但這也會影響多表設計。

使作業ID成爲大表的第一個關鍵字段對於單作業操作的性能影響應該可以忽略不計,而不是爲每個作業分別創建一個表。

另外,對於相同數量的總數據,單個大型表通常比多個表具有更高的空間效率。這將通過降低緩存壓力來提高性能。

+0

謝謝克里斯。 – jaks 2010-09-28 20:33:49