Skip to content

[Enhancement] 分区裁剪后, 某些冗余的where过滤信息可以删除掉 #6021

@huangmengbin

Description

@huangmengbin

Is your feature request related to a problem? Please describe.

  • 按照 time 进行 range分区后,假如有一个分区 p20210520 范围是 ['2021-05-20 00:00:00', '2021-05-21 00:00:00')
1. SELECT MAX(xxx) FROM xx PARTITION(p20210520);
2. SELECT MAX(xxx) FROM xx WHERE `time` >= '2021-05-20 00:00:00' AND `time` < `2021-05-21 00:00:00`;
3. SELECT MAX(xxx) FROM xx PARTITION(p20210520) 
                           WHERE `time` >= '2021-05-20 00:00:00' AND `time` < `2021-05-21 00:00:00`;
  • 理论上,三者逻辑是完全等价的。然而2和3的往往通常会比1慢。
  • 这可能是 where 中的信息仍进入了be,使be执行了无效的扫描和计算。

Describe the solution you'd like

  • 取出所有被分区裁剪器选中的分区,求出其上下界,作为一个range。它是所有被选中的分区的超集。
  • 若为多列分区,则需要额外计算最后一个columnIndex。要求:此下标位置及之前的所有literal,上下界均要相等。
  • 遍历where表达式列表:删除掉列号不超过1+columnIndex、且范围能够全覆盖上述的range的表达式。

Additional context

  • 功能已开发完成。预计下周可发布PR,前提是Range分区裁剪器不精确的BUG要先被修复。issue 5989
  • 预计添加新feature后,2和3的性能能够追平第1条sql.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions