Oracle

壓縮分區 - 索引呢?

  • March 27, 2015

為了節省磁碟空間,我想壓縮表的一些分區:

alter table TEST_TAB move partition TEST_TAB_2014 compress for all operations;

我在這個分區上也有索引。

我應該在壓縮後重新創建索引,還是沒有必要?

這種線上壓縮是額外費用選項。而且通常線上壓縮的壓縮比更差,然後是離線壓縮。這是因為第一個工作在行級別,而後一個工作在塊級別。因此,如果您真的想在數據庫中騰出一些空間並且您的舊數據大多是只讀的,您應該使用:

ALTER TABLE table_name MOVE partition TEST_TAB_2014 COMPRESS;

然後手動重建(不重新創建)所有索引,最好使用合理的並行選項。

PS:您還應該閱讀有關 Oracle 提供的各種壓縮選項的資訊。不幸的是,從技術和許可的角度來看,這並不簡單。

簡而言之,Oracle 支持以下壓縮選項:

  • BASIC,離線,塊級。通常,表空間的塊大小越大,壓縮比越好。僅在移動表/分區或使用直接路徑載入時使用此選項(/* +APPEND */ 提示)
  • OTLP,線上,行級,是高級壓縮額外費用選項的一部分。

ALTER TABLE … COMPRESS FOR OLTP  這種方法將為所有未來的 DML 啟用 OLTP 表壓縮——但是,表中的現有數據將保持未壓縮狀態。

ALTER TABLE … MOVE COMPRESS FOR OLTP  這種方法將為未來的 DML 啟用 OLTP 表壓縮,並壓縮現有數據。

  • COLUMNAR,在列級別上工作,這個也可以用於 LOB 壓縮。您只能在 Exatada 上或在使用 Oracle 的某些 SAN/NAS 儲存時使用它。

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