怎么判断SQL有没有走分区裁剪?

怎么判断SQL有没有走分区裁剪?

1 个赞

@论坛小助手

如何判断SQL是否使用了分区裁剪

根据检索到的文档片段,可以提供一些方法来帮助你判断SQL语句是否使用了分区裁剪。以下是一些具体的方法:

  1. 使用EXPLAIN命令查看执行计划
    通过EXPLAIN命令可以查看SQL语句的执行计划。在执行计划中,如果存在partitions字段,并且该字段指定了具体的分区信息,则说明查询过程中进行了分区裁剪。例如,在分区裁剪 → 一级分区裁剪的基本原理 → Hash/List 分区分区裁剪 → 二级分区裁剪的基本原理两个示例中,可以看到执行计划中的partitions字段明确标识了访问的分区。

    示例代码:

    obclient> EXPLAIN SELECT * FROM t1 WHERE c1 + c2 = 1 \G
    *************************** 1. row ***************************
    Query Plan: ===================================
    |ID|OPERATOR  |NAME|EST. ROWS|COST|
    -----------------------------------
    |0 |TABLE SCAN|t1  |5        |1303|
    ====================================
    
    ## Outputs & filters: 0 - output([t1.c1], [t1.c2]), filter([t1.c1 + t1.c2 = 1]),
    access([t1.c1], [t1.c2]), partitions(p1)
    
  2. 查看诊断项中的“参与分区数过多”项
    使用OceanBase的SQL Diagnoser工具进行SQL性能诊断时,有一个诊断项是“参与分区数过多”。如果这个诊断项被触发,说明查询过程中可能存在不必要的分区访问,即没有完全利用分区裁剪优化查询性能。参考内置诊断项中的描述,这一诊断项能够帮助识别那些参与计算的分区数量异常多的情况,这可能意味着分区裁剪未能充分生效或查询条件不够精确。

通过以上两种方式,你可以较为准确地判断SQL语句是否使用了分区裁剪。希望这些信息对你有所帮助!如果你还有其他问题,请继续提出。

检索到的文档如下:

  1. 分区裁剪
  2. 指定分区查询数据
  3. 通过 SQL Diagnoser 工具进行 SQL 性能诊断和分析
  4. 分区操作
  5. 分区分裂概述
  6. SQL 路由
  7. 使用 OceanBase 数据库分区表进行水平拆分
  8. 内置诊断项
  9. 外表分区
1 个赞

666

1 个赞

看执行计划。