
# 特性约束
对于高级压缩（ADVANCED）：
- 不支持系统表、内存表、全局临时表、本地临时表和序列表，不支持Ustore段页式表，不支持unlogged表，不支持压缩toast数据。
- 支持用户为普通表、分区、二级分区设置ILM策略。
- 支持普通表、分区、二级分区的Astore/Ustore用户表和透明加密表。
- 特性仅在ORA兼容模式、PG兼容模式以及MYSQL兼容模式下有效。
- Ustore不支持编解码，压缩率低于Astore。
- 由于当前版本新增了部分解压特性，会导致部分极小的表在判断压缩收益时不通过，从而不进行压缩。但此前没有部分解压的版本可以压缩。例如：单表单字段int1类型的数据从当前版本开始无法进行压缩。
- 对于ORA兼容模式下的datea类型，若开启mapping_date_to_datea参数，由于数据类型的存储结构发生了变化，压缩率也会受到影响。与date类型相比，datea类型的压缩率可能会更低。
- 对于GET_COMPRESSION_RATIO接口，不支持行级表达式。
- 不支持对压缩表的rowid执行原位更新操作。
- 对于处于压缩状态的用户表，转换为rowid表后，该表数据将被自动解压。
- 对于rowid表，不支持使用rowid/rowno系统列作为行级表达式条件。
 
对于索引压缩（ADVANCED）：
- 只支持BTree类型索引压缩，场景只支持涉及build/rebuild index相关场景时的压缩和后台调度（定时和手动）时的压缩。
- build index时压缩只支持全部压缩，后台调度则根据页面LMT（Last Modified Time）执行压缩。
- 已压缩的索引需要rebuild index时，只支持全量重新压缩或不压缩，或重建完在后台调度时根据页面LMT压缩。
- 当前版本仅适配Astore，Ustore不支持。
- 索引压缩依赖于索引所在的表或者分区上的策略信息。
- 支持对Astore的普通表、分区表以及hashbucket表上的索引、二级（局部）索引以及全局索引进行索引压缩，不支持全局二级索引压缩。
- 特性仅在ORA兼容模式、PG兼容模式以及MYSQL兼容模式下有效。
- 在某些场景下，可能会导致被压缩索引占用空间膨胀，比如为分区表创建global索引并压缩，合并分区的时候同时更新global索引，由于改变了分区，global索引会有新的key插入，可能会导致global索引发生分裂，最后表现为global索引在分区合并后的占用空间大于合并前的占用空间。
- 对于在线压缩的索引，释放的页面并不能马上复用（需要满足一定条件后在下一轮调度压缩时释放），如果索引key是随机插入的，key可能会插入到已压缩的页面从而导致页面分裂（相比于未压缩页面更有可能分裂，已压缩页面包含的index tuple数往往更多），需要新申请页面，可能会导致已压缩索引的空间膨胀大于未压缩索引的空间膨胀。鉴于此，如果索引key是随机插入的，或者说索引的写入比较难区分冷热，不建议开启索引在线压缩。如果该索引已经开启索引压缩，用户可以选择删除该表的策略以关闭索引压缩（会同时把堆表压缩关闭），或者选择将gs_ilm_param的ENABLE_INDEX_COMPRESS改为0以关闭索引压缩总开关（会导致其他索引也不能压缩）。
- 当表存在多个索引时，索引要么都开启索引压缩，要么都不开启索引压缩，不支持单个索引的压缩控制。
- 不支持与索引跳跃扫描同时使用。如果开启索引跳跃扫描，当扫描到索引压缩行时会直接报错。
- 当数据库从无索引压缩版本升级至有索引压缩版本后，若想要在原表使用索引压缩功能，需要手动重新设置表策略，索引压缩才会生效。
- 如果对索引配置了posting去重压缩，build index时不支持ILM索引压缩。
- 当数据库从无索引压缩版本升级后，若想要在原表使用索引压缩功能，需要手动重新设置表策略，索引压缩才会生效。
 
对于copy批量导入压缩（ADVANCED）：
- 支持copy批量导入时压缩（包括copy和\\copy），不支持insert into select场景下压缩，不支持单行导入时压缩（比如：导入分区表并且开启了违法约束不回滚功能；表上带触发器等）。
- 与copy容错机制（LOG ERRORS或LOG ERRORS DATA）共用时，如果错误数据频繁出现，可能导致压缩无收益。
- TOAST数据不支持导入压缩。
- 由于索引压缩的时机是build/rebuild或后台调度压缩，在copy批量导入压缩时，索引不压缩。
- 升级观察期不支持使用该功能。
- 只支持Astore表，不支持Ustore。
- 支持ORA兼容模式、PG兼容模式、MYSQL兼容模式，不支持M兼容模式。
- 不支持与逻辑解码同时使用，如果开启逻辑解码，则copy导入压缩会直接报错。
 
对于库级策略（ADVANCED）：
- 库级压缩策略仅支持高级压缩。
- 升级观察期不支持使用库级策略。
- 库级策略不支持表达式功能。
- 在使用gs_dump导出库级策略定义时，需满足以下条件方可生效：必须执行全库导出操作且用户具备系统管理员权限。若上述条件未同时满足，则相关策略将以表、分区或子分区级别的独立策略形式导出，而非作为库级策略处理。
 
对于跨页透明压缩（TURBO）：
- 仅支持页式下用户创建的Astore/Ustore普通行存表，其他类型表创建时报错。
- 跨页透明压缩不在toast表上生效，对于toast表无压缩效果提升。
- 特性仅在ORA兼容模式、PG兼容模式以及MYSQL兼容模式下有效。
- 跨页透明压缩不支持与其他表压缩算法叠加使用，叠加使用时报错；
- 不支持与透明加密叠加使用，叠加使用时报错。
- 模式编码仅支持aheap、uheap页面类型，其他页面类型不生效，无法提升压缩比。
- 不支持ILM策略ADD、DELETE、ADD+DELETE，否则会报错。
- 分区分裂合并不支持ILM策略类型变更，否则会报错。
- 不支持在reindex时指定ILM压缩策略，否则会报错。
- 分区交换时表和分区的跨页透明压缩配置（compress unit、compressor、encoder）需严格一致，否则报错处理。
- 不支持Online DDL操作，如果指定会自动转化为离线方式执行。
- 跨页透明压缩/解压代价极大，仅支持在冷数据场景中使用。
- 跨页透明压缩的语法和调度方式沿用ILM现有机制，不支持新增兼容性特性。
 
对于索引压缩（TURBO）：
- 仅支持页式下用户创建的Btree/Ubtree索引下的数据文件，其他类型索引创建时报错。
- 索引的压缩类型与父表需保持一致，否则会报错。
- 索引不支持分区单独指定跨页透明压缩策略，否则会报错。
- 显式指定索引压缩策略时，以指定策略为准（未指定压缩级别时默认取MEDIUM），未显式指定索引压缩策略时，索引是否压缩和压缩级别与表保持一致。
 
对于库级策略（TURBO）：
- 升级观察期禁止创建跨页透明压缩表，创建时报错。
- ADIO对跨页透明压缩对象不生效，当开启ADIO时，跨页压缩仍会使用buffered io进行磁盘读写。
- 备份时指定的block buffer选项大小对跨页透明压缩对象的MAINFORK不生效。
 
对于压缩级别：
- 高级压缩支持可选级别包括medium和high。不指定压缩级别时默认为medium级别，使用lz4压缩算法；指定high级别时，使用zstd压缩算法。
- 跨页透明压缩支持可选级别包括low、medium和high。不指定压缩级别时默认为medium级别。
- 升级观察期不支持指定压缩级别。
 
