SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLEシステム手続きを使って、表や索引に割り当てられた未使用の領域を回収することができます。 未利用の割り当てられた領域が存在する典型的な状況は、表から大規模な情報が情報が削除された後、それで空いた領域を使う情報が挿入されていない場合です。 既定ではDerbyは未使用の領域を基本ソフト(OS)に返却しません。例えば表や索引に割り当てられたページは、表や索引が破棄されるまでは基本ソフト(OS)に返却されません。 SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLEにより使われていない領域を基本ソフト(OS)に返却することができます。
このシステム手続きにより、三種類の圧縮をSQL表の記録された領域にて行います。 その三種類とはPURGE_ROWS、DEFRAGMENT_ROWSそれと TRUNCATE_ENDです。またSYSCS_UTIL.SYSCS_COMPRESS_TABLE()とは異なり、既存の表および索引が記録された領域だけを使って全処理が行われます。
SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE( IN SCHEMANAME VARCHAR(128), IN TABLENAME VARCHAR(128), IN PURGE_ROWS SMALLINT, IN DEFRAGMENT_ROWS SMALLINT, IN TRUNCATE_END SMALLINT )
call SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE('US', 'CUSTOMER', 1, 1, 1);
call SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE('US', 'CUSTOMER', 0, 0, 1);
CallableStatement cs = conn.prepareCall ("CALL SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE(?, ?, ?, ?, ?)"); cs.setString(1, "US"); cs.setString(2, "CUSTOMER"); cs.setShort(3, (short) 1); cs.setShort(4, (short) 1); cs.setShort(5, (short) 1); cs.execute();
CallableStatement cs = conn.prepareCall ("CALL SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE(?, ?, ?, ?, ?)"); cs.setString(1, "US"); cs.setString(2, "CUSTOMER"); cs.setShort(3, (short) 0); cs.setShort(4, (short) 0); cs.setShort(5, (short) 1); cs.execute();