Oracle-11g

添加與刪除列的持續時間

  • June 5, 2015

我有一個包含超過 5000 萬行的表。

當我添加一列時:

ALTER TABLE my_table ADD my_column NUMBER;

它非常快。

在添加列之後,我將其刪除。

ALTER TABLE my_table DROP COLUMN my_column;

需要3分鐘!

為什麼添加列如此之快,而在不填充的情況下刪除它卻很慢?

當您添加一個可為空且不提供預設值的列時,數據庫不必對錶數據本身執行任何操作。行沒有改變,只有表元數據被改變。

(這是由於使用了磁碟上的行格式。通常/在正常情況下/對於普通數據類型,行尾的空列不儲存在行塊中。)

另一方面,當您物理刪除一列(而不是隱藏/設置未使用)時,至少需要檢查所有行以檢查是否需要刪除任何數據。所以理論上最好的情況成本是全表掃描。(我相信也涉及一些表鎖定。)最壞的情況是所有行都必須重寫。這可能非常昂貴。

引用自:https://dba.stackexchange.com/questions/103267