Oracle数据库Basic与Advanced Row Compression压缩差异探究
Oracle Basic Compression vs Advanced Row Compression:压缩率差异原因
你观察到的压缩率差异,核心源于两者设计目标与触发逻辑的本质区别——即便底层都用到块头符号表去重,算法的激进程度和适配场景完全不同:
压缩触发时机的限制
Basic Compression仅在直接路径加载(比如INSERT /*+ APPEND */、CTAS、SQL*Loader直接路径模式)时生效,是专为静态、批量导入的数据做极致优化的方案。而Advanced Row Compression支持所有DML操作(常规INSERT、UPDATE、DELETE),要兼顾实时数据修改的性能,因此压缩算法不能过于激进,否则会导致后续DML时块头符号表频繁更新,拖慢操作速度。算法优化方向的差异
虽然都基于块级重复值去重,但Basic针对批量静态数据会做更深层次的编码优化:比如对更长的重复字符串、数值做更紧凑的编码,甚至合并更多重复模式;而Advanced为适配动态DML,会采用更轻量化的编码规则——比如限制符号表条目数量、避免过度编码带来的修改开销,这直接导致它的压缩率不如Basic极致。测试场景的影响
如果你的测试是用直接路径加载方式向两张表导入数据,Basic会完全发挥其压缩能力;而Advanced即便在批量加载下,也会保留适配后续DML的冗余设计,不会做到和Basic一样的压缩率。只有当表需要频繁更新时,Advanced的优势才会体现:它能在数据修改后依然维持一定压缩率,而Basic对常规DML插入的数据不会压缩,甚至可能导致块膨胀。
内容的提问来源于stack exchange,提问作者alexzhvv
相关产品推荐
相关产品推荐

