Oracle
如何估計新表的大小?
我們有包含大量數據的表(每個月有 5000 萬行新行,僅在一個表中)。
現在我想知道向這些表中添加新列或創建新表會產生什麼影響。類似於:表 X上的新列可以將使用的空間增加其目前大小的 12%。或者:假設新表將以 1000 行/天的速度增長,預期大小將在一個月內為Y。
我已經找到了一些關於這個
DBMS_SPACE
包的資訊,但它似乎沒用,因為create_table_cost_colinfo()
它只返回有用的資訊VARCHAR2
。您對“輕鬆”估計這些資訊有什麼建議嗎?
您可以從測量此表的大小和行數開始。如果你每小時/每天/每週都這樣做,那麼你就會對這張表的增長有所了解。
select to_char(sum(bytes)/1024/1024, '999,999,999')||' Mb' from dba_segments where owner=upper('&TableOwner') and segment_name=upper('&Table') / select count(*) from tableowner.table /
考慮到您獲得的大小還包含分配給表的空白空間。當表剛剛擴展並且僅在此擴展中寫入 1 條新記錄時,則資訊不太正確。但鑑於您每天有近 2M 行,每行的空間將非常準確。
從維護的角度來看,2張桌子肯定更好。可以歸檔、刪除、截斷新表,而不會影響現有表。它可以物理儲存在單獨的表空間中。此外,與新表相比,添加新列將產生更大的整體影響
$$ s $$. 命中此表的查詢的執行計劃將失效,這可能會大大降低性能(假設目前一切都很好)。 另一件事是,例如,將人的名字儲存在一個表中,而將姓氏儲存在另一個表中看起來很奇怪。我寧願專注於邏輯結構…