Michał Herman Asked: 2015-03-27 04:08:59 +0800 CST2015-03-27 04:08:59 +0800 CST 2015-03-27 04:08:59 +0800 CST 压缩分区 - 索引呢? 772 为了节省磁盘空间,我想压缩表的一些分区: alter table TEST_TAB move partition TEST_TAB_2014 compress for all operations; 我在这个分区上也有索引。 我应该在压缩后重新创建索引,还是没有必要? oracle index 2 个回答 Voted Best Answer ibre5041 2015-03-27T04:55:02+08:002015-03-27T04:55:02+08:00 这种在线压缩是额外费用选项。而且通常在线压缩的压缩比更差,然后是离线压缩。这是因为第一个工作在行级别,而后一个工作在块级别。因此,如果您真的想在数据库中腾出一些空间并且您的旧数据大多是只读的,您应该使用: 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 存储时使用它。 Andrea de Palo 2015-03-27T04:46:44+08:002015-03-27T04:46:44+08:00 您可以在之后重建索引或使用 WITH UPDATE INDEX 执行您的语句时。例如 ALTER TABLE table_name MOVE COMPRESS FOR ALL OPERATIONS WITH UPDATE INDEX; 笔记。您的语句不会压缩现有数据:仅插入将来的数据。
这种在线压缩是额外费用选项。而且通常在线压缩的压缩比更差,然后是离线压缩。这是因为第一个工作在行级别,而后一个工作在块级别。因此,如果您真的想在数据库中腾出一些空间并且您的旧数据大多是只读的,您应该使用:
然后手动重建(不重新创建)所有索引,最好使用合理的并行选项。
PS:您还应该阅读有关 Oracle 提供的各种压缩选项的信息。不幸的是,从技术和许可的角度来看,这并不简单。
简而言之,Oracle 支持以下压缩选项:
BASIC,离线,块级。通常,表空间的块大小越大,压缩比越好。仅在移动表/分区或使用直接路径加载时使用此选项(/* +APPEND */ 提示)
OTLP,在线,行级,是高级压缩额外费用选项的一部分。
您可以在之后重建索引或使用
执行您的语句时。例如
笔记。您的语句不会压缩现有数据:仅插入将来的数据。