ignite-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vladimir Ozerov (JIRA)" <j...@apache.org>
Subject [jira] [Assigned] (IGNITE-6663) SQL: optimize primary key equality lookup
Date Wed, 15 Nov 2017 09:45:00 GMT

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

Vladimir Ozerov reassigned IGNITE-6663:

    Assignee: Kirill Shirokov

> SQL: optimize primary key equality lookup
> -----------------------------------------
>                 Key: IGNITE-6663
>                 URL: https://issues.apache.org/jira/browse/IGNITE-6663
>             Project: Ignite
>          Issue Type: Task
>      Security Level: Public(Viewable by anyone) 
>          Components: sql
>            Reporter: Vladimir Ozerov
>            Assignee: Kirill Shirokov
>              Labels: performance
>             Fix For: 2.4
> H2 perform every index search through {{BaseIndex.find}} method. It contains both {{first}}
and {{last}} rows. If condition looks like {{attr = ?}}, then both bounds are the same. When
this call is propagated to our {{BPlusTree}}, then two index lookups occur:
> - Lower bound: {{BPlusTree#findInsertionPoint}}
> - Upper bound: {{BPlusTree.ForwardCursor#findUpperBound}}
> This is done for a reason because we do not know in advance how many elements are in
between the bounds, so one lookup + scan is not an option in general case. But in case of
PK lookup with equality condition, when we know in advance that only one row will be returned,
this leads to additional unnecessary comparisons. 
> Suggested fix:
> 1) Make sure that all rows in {{GridH2PlainRowFactory}} has correct {{equals}} implementation.
> 2) Inside {{H2TreeIndex#find}}: if this is PK index (see constructor args) and {{lower.equals(upper)}},
then use {{BPlusTree.findOne}} instead of {{BPlusTree.find}}.

This message was sent by Atlassian JIRA

View raw message