Details
Description
Not correlated condition cannot be pushed to table scan if there is also correlated condition in the filter.
For example, in this query:
SELECT (SELECT id FROM tbl AS t2 WHERE t2.id < 50 AND t2.id = t1.id) FROM tbl AS t1
Condition t2.id < 50 can be pushed to table scan and condition t2.id = t1.id can be used as hash spool search row, but currently filter can't be splitted and plan uses table spool instead of hash spool and become very ineffective:
IgniteProject(EXPR$0=[$1]) IgniteCorrelatedNestedLoopJoin(condition=[true], joinType=[left], variablesSet=[[$cor0]], correlationVariables=[[$cor0]]) IgniteExchange(distribution=[single]) IgniteTableScan(table=[[PUBLIC, TBL]]) IgniteColocatedHashAggregate(group=[{}], agg#0=[SINGLE_VALUE($0)]) IgniteFilter(condition=[AND(<($0, 50), =($0, $cor0.ID))]) IgniteTableSpool(readType=[LAZY], writeType=[EAGER]) IgniteExchange(distribution=[single]) IgniteTableScan(table=[[PUBLIC, TBL]])
Attachments
Issue Links
- is part of
-
IGNITE-12248 Apache Calcite based query execution engine
- Open
- links to