[ 
https://issues.apache.org/jira/browse/TRAFODION-2751?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Hans Zeller updated TRAFODION-2751:
-----------------------------------
    Fix Version/s:     (was: 2.2-incubating)
                   2.3-incubating

> Unnecessary PROBE_CACHE in an index join
> ----------------------------------------
>
>                 Key: TRAFODION-2751
>                 URL: https://issues.apache.org/jira/browse/TRAFODION-2751
>             Project: Apache Trafodion
>          Issue Type: Bug
>          Components: sql-cmp
>    Affects Versions: 2.1-incubating
>            Reporter: Hans Zeller
>            Assignee: Hans Zeller
>             Fix For: 2.3-incubating
>
>
> When we transform a scan into a nested join of an index and its base table, 
> this join is on the clustering key columns, which are present and unique in 
> both the index and the base table.
> Therefore, this is a 1:1 join with unique matches on each side. There is no 
> use in a probe cache, since we will never probe for the same base table key 
> twice.
> Right now we see a probe cache, though. There are a few reasons and I'm not 
> sure whether this is a regression or an old bug.
> The reason: When we create the index join, in 
> IndexJoinRule1::makeSubstituteFromIndexInfo() in file 
> core/sql/optimizer/TransRule.cpp, we don't synthesize logical properties for 
> the join. This is correct, in principle, because its logical properties are 
> the same as those of the scan. However, the synthLogProp() method also sets 
> some local variables in the join that are used to determine whether a probe 
> cache is useful: leftHasUniqueMatches_ and rightHasUniqueMatches_.
> Here is a test case:
> create table tdi(service_id int not null,
>                  user_number int not null,
>                  start_time timestamp not null,
>                  b int,
>                  primary key(service_id, user_number, start_time))
> division by (date_trunc('day', start_time))
> salt using 4 partitions on (user_number);
> create index tdix on tdi(user_number, start_time) salt like table;
> control query shape join(cut,cut);
> prepare s from
> select * from tdi where user_number = 1234 and start_time between timestamp 
> '2017-01-01 00:00:00' and timestamp '2017-01-15 00:00:00';
> explain options 'f' s;
> The explain shows a PROBE_CACHE, which is unnecessary.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to