tencent cloud

文档反馈

延迟物化

最后更新时间:2024-12-11 14:44:39

    什么是延迟物化

    在数据库执行 SQL 查询时,若无法命中主键或索引键,将不得不进行全表扫描(TableScan),这种全量数据扫描的代价通常较高。为了优化这一过程,可以采用延迟物化(Lazy Materialization)技术,该技术通过推迟数据的物化,直到查询执行阶段才进行必要的计算和存储,进而提升查询性能和系统响应速度。
    在只读分析引擎执行 SQL 查询的过程中,首先会读取谓词列,并利用 Filter 算子进行计算,从而得到过滤后的结果。随后,只读分析引擎会根据这些过滤结果物化其他需要读取的列数据。这种方法有效减少了非谓词列在大量过滤数据上的读取量,从而提高了扫描速度。

    延迟物化的优势

    在只读分析引擎中数据是被压缩过的,物化的过程就必须对数据进行解压,通过延迟物化技术可以减少解压的数据范围,从而减轻解压缩所带来的 CPU 开销。
    当 SQL 查询涉及多个列时,早期物化可能会导致数据库读取并组合所有列的数据,尽管其中一些列可能并不会用于最终结果的查询。相比之下,延迟物化策略则推迟了数据的组合过程,使得数据库仅读取和处理那些真正需要的列数据。这种做法有效减少了不必要的 I/O 操作,从而提高了查询效率。
    延迟物化可以让过滤、聚合等操作更加高效,因为这些操作只需要处理列数据,而不需要处理整行数据。列存储的特性(如数据压缩、批量处理)能够更好地发挥作用,从而加快查询执行速度。

    延迟物化相关参数

    延迟物化功能可以通过参数 libra_enable_late_materialization 进行开关,参数值为 ON,表示已经开启延时物化功能。
    属性
    描述
    参数类型
    BOOL。
    默认值
    ON。
    取值范围
    ON:打开延迟物化功能。
    OFF:关闭延迟物化功能。
    作用域
    Global & Session。
    支持 SET_VAR Hint
    是。
    #在 session 级别关闭延迟物化
    set libra_enable_late_materialization=off;
    #在 session 级别开启延迟物化
    set libra_enable_late_materialization=on;

    延迟物化示例

    如下图所示,当开启延迟物化时,可以从执行计划清晰的看到 COLUMN READ 算子。此算子即为延迟物化功能生效的示例。
    

    如何在 HINT 中设置延迟物化

    通过 SET_VAR Hint 可以在单条 SQL 语句中指定开启或关闭延迟物化,示例如下。
    select /*+ set_var(libra_enable_late_materialization=1)*/ * from t where c1=1 and c2=1;
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持