[
https://issues.apache.org/jira/browse/IGNITE-25162?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Iurii Gerzhedovich updated IGNITE-25162:
----------------------------------------
Description:
Seems a bit optimization can be applied if correlate contains in left input of
join, in such a case no need to clear right side (hash store in case of hash
join). If no more items available from left input of upper correlated nested
loop join - seems right input need not to store items more and can clear
appropriate store. All kind of join types need to be covered by tests.
-Probably also if left side have not contains correlates (check whole plan
attached) or less than Commons#IN_BUFFER_SIZE - no need to re-request it each
time.-
Partial plan example:
{noformat}
HashJoin
condition: =(SS_SOLD_DATE_SK, D_DATE_SK)
joinType: inner
est. row count: 79851
Exchange
distribution: affinity[tableId=31, zoneId=31][0]
est. row count: 959175
TableScan
table: [PUBLIC, STORE_SALES]
filters: =($cor4.C_CUSTOMER_SK, SS_CUSTOMER_SK)
fields: [SS_SOLD_DATE_SK, SS_CUSTOMER_SK]
est. row count: 959175
TableScan
table: [PUBLIC, DATE_DIM]
filters: AND(=(D_YEAR, 2000), >=(D_MOY, 3), <=(D_MOY, +(3, 3)))
fields: [D_DATE_SK, D_YEAR, D_MOY]
est. row count: 6081
{noformat}
was:
Seems a bit optimization can be applied if correlate contains in left input of
join, in such a case no need to clear right side (hash store in case of hash
join). If no more items available from left input of upper correlated nested
loop join - seems right input need not to store items more and can clear
appropriate store. All kind of join types need to be covered by tests. Probably
also if left side have not contains correlates (check whole plan attached) or
less than Commons#IN_BUFFER_SIZE - no need to re-request it each time.
Partial plan example:
{noformat}
HashJoin
condition: =(SS_SOLD_DATE_SK, D_DATE_SK)
joinType: inner
est. row count: 79851
Exchange
distribution: affinity[tableId=31, zoneId=31][0]
est. row count: 959175
TableScan
table: [PUBLIC, STORE_SALES]
filters: =($cor4.C_CUSTOMER_SK, SS_CUSTOMER_SK)
fields: [SS_SOLD_DATE_SK, SS_CUSTOMER_SK]
est. row count: 959175
TableScan
table: [PUBLIC, DATE_DIM]
filters: AND(=(D_YEAR, 2000), >=(D_MOY, 3), <=(D_MOY, +(3, 3)))
fields: [D_DATE_SK, D_YEAR, D_MOY]
est. row count: 6081
{noformat}
> Sql. No need to rewind right input for AbstractRightMaterializedJoinNode
> implementors if correlates are present in left input
> -----------------------------------------------------------------------------------------------------------------------------
>
> Key: IGNITE-25162
> URL: https://issues.apache.org/jira/browse/IGNITE-25162
> Project: Ignite
> Issue Type: Task
> Components: sql
> Affects Versions: 3.0
> Reporter: Evgeny Stanilovsky
> Priority: Major
> Labels: ignite-3
> Attachments: corr_plan.txt
>
>
> Seems a bit optimization can be applied if correlate contains in left input
> of join, in such a case no need to clear right side (hash store in case of
> hash join). If no more items available from left input of upper correlated
> nested loop join - seems right input need not to store items more and can
> clear appropriate store. All kind of join types need to be covered by tests.
> -Probably also if left side have not contains correlates (check whole plan
> attached) or less than Commons#IN_BUFFER_SIZE - no need to re-request it each
> time.-
> Partial plan example:
> {noformat}
> HashJoin
> condition: =(SS_SOLD_DATE_SK, D_DATE_SK)
> joinType: inner
> est. row count: 79851
> Exchange
> distribution: affinity[tableId=31, zoneId=31][0]
> est. row count: 959175
> TableScan
> table: [PUBLIC, STORE_SALES]
> filters: =($cor4.C_CUSTOMER_SK, SS_CUSTOMER_SK)
> fields: [SS_SOLD_DATE_SK, SS_CUSTOMER_SK]
> est. row count: 959175
> TableScan
> table: [PUBLIC, DATE_DIM]
> filters: AND(=(D_YEAR, 2000), >=(D_MOY, 3), <=(D_MOY, +(3, 3)))
> fields: [D_DATE_SK, D_YEAR, D_MOY]
> est. row count: 6081
> {noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)