DB2 V9表壓縮(四)

rheet1978發表於2008-11-17
對錶啟用空值、系統預設值壓縮

除了資料行壓縮以外,以前的空值壓縮在DB2 V9中繼續可以使用。建立表時,可使用可選 VALUE COMRESSION 子句來指定表在使用表級別也可能是列級別的節省空間的行格式。使用 VALUE COMRESSION 時,不會將已指定給已定義的變長資料型別(VARCHAR、VARGRAPHICS、LONG VARCHAR、LONG VARGRAPHIC、BLOB、CLOB 和 DBCLOB)的 NULL 和零長度資料儲存在磁碟上。只有與這些資料型別相關聯的開銷值才會佔用磁碟空間。如果使用了VALUE COMRESSION,那麼還可以使用可選 COMPRSS SYSTEM DEFAULT 選項來進一步減少磁碟空間的使用量。如果插入的或更新的值等於列的資料型別的系統預設值,那麼使用的磁碟空間最少。預設值將不會儲存在磁碟上。支援COMPRSS SYSTEM DEFAULT的資料型別包括所有數字型別列、定長字元和定長圖形字串資料型別。這表示零和空格可以壓縮。要確定是否應考慮對錶進行空間壓縮,應瞭解大多數值等於系統預設值或 NULL 值的表將受益於新的行格式。例如,假設有一個 INTEGER 列且列的 90% 的列值為 0 (INTEGER資料型別的預設值)或 NULL,壓縮此表和此列將受益於新的行格式並節省大量的磁碟空間。

下面我們建立示例表TEST3,其使用VALUE COMRESSION對整個表的空值進行壓縮,對每個列使用COMPRESS SYSTEM DEFAULT選項對資料型別預設的系統預設值進行壓縮。

在DB2CLP視窗連上示例資料庫,發出CREATE TABLE命令建立示例表TEST3,並插入部分資料,具體如清單22所示:

- -清單22 .建立示例表TEST3

C:\> db2 connect to db2test1

   資料庫連線資訊

 資料庫伺服器         = DB2 / NT 9.1.0

 SQL 授權標識         = RHETTE

 本地資料庫別名       = DB2TEST1

C:\> DB2 CREATE TABLE TEST3 ( ID INTEGER  COMPRESS SYSTEM DEFAULT , NAME VARCHAR ( 10 ) COMPRESS SYSTEM DEFAULT , NOTE VARCHAR ( 100 )  COMPRESS SYSTEM DEFAULT ) IN TABLESPACE1 VALUE COMPRESSION

DB20000I  SQL命令成功完成。

C:\> db2 insert into test3 ( id , name ) values ( 0 , ' aa ')

DB20000I  SQL命令成功完成。

C:\> db2 insert into test3 ( id , name ) values ( 1 , ' bb ')

DB20000I  SQL命令成功完成。

 

命令成功完成,這樣我們就建立了示例表TEST3,其使用空值和預設值壓縮。

COMPRESS SYSTEM DEFAULT指定對系統預設值儲存時使用最小空間,如果VALUE COMRESSION子句沒有被指定,將返回一個警告SQLSTATE01648,並且系統預設值也不會在壓縮儲存。允許系統預設值壓縮將對INSERT和UPDATE操作額外增加一些效能開支,因為需要額外檢查是否需要預設值壓縮。COMPRESS SYSTEM DEFAULT子句不支援DATE,TIME,TIMESTAMP,XML或者結構化資料型別,否則會報SQLSTATE 42842錯誤。如果基本資料型別是變長字串,則本語句將自動忽略。

可以使用 DEACTIVATE VALUE COMPRESSION 來指定表將不再對錶中資料使用節省空間技術。如果使用DEACTIVATE VALUE COMPRESSION,這將顯式禁用與該表中的列相關聯的所有 COMPRESS SYSTEM DEFAULT 選項。

下面我們對示例表TEST3的ID列禁用系統預設值壓縮,在DB2CLP視窗中,發出帶COMPRESS OFF選項的ALTER TABLE命令,具體如清單23所示:

- -清單23 .對示例表TEST3一個列禁用系統預設值壓縮

C:\> DB2 ALTER TABLE TEST3 ALTER COLUMN ID COMPRESS OFF

DB20000I  SQL命令成功完成。

 

下面我們對示例表TEST3使用 DEACTIVATE VALUE COMPRESSION 來指定表將不再對錶中資料使用節省空間技術,其各個列上的COMPRESS SYSTEM DEFAULT也將同時禁用。

在DB2CLP視窗中發出DEACTIVATE VALUE COMPRESSION命令,具體如清單24所示:

- -清單24 .對示例表TEST3禁用空間節省技術

C:\> DB2 ALTER TABLE TEST3  DEACTIVATE VALUE COMPRESSION

DB20000I  SQL命令成功完成。

 

如果想對沒有啟用空值壓縮的舊錶啟用空值壓縮,可以是帶ACTIVATE VALUE COMPRESSION選項的ALTER TABLE命令顯式地啟用空值壓縮,比如我們對示例表TEST3還想啟用空值壓縮,可以在DB2CLP視窗中發出ALTER TABLE命令,具體如清單25所示:

- - 清單25 .對示例表TEST3啟用空值壓縮

C:\> DB2 ALTER TABLE test3 ACTIVATE VALUE COMPRESSION

DB20000I  SQL命令成功完成。

 

      如果對某個列想啟用系統預設值壓縮,可以在DB2CLP視窗中發出ALTER TABLE命令,具體如清單26所示:

- - 清單26 .對示例表TEST3啟用系統預設值壓縮

C:\> DB2 ALTER TABLE test3 ALTER id COMPRESS SYSTEM DEFAULT

DB20000I  SQL命令成功完成。

 

 

參考資料

學習


獲得產品和技術


討論

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9524210/viewspace-496184/,如需轉載,請註明出處,否則將追究法律責任。

相關文章