You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ignite.apache.org by "Vladimir Ozerov (JIRA)" <ji...@apache.org> on 2017/10/18 11:09:01 UTC

[jira] [Created] (IGNITE-6663) SQL: optimize primary key equality lookup

Vladimir Ozerov created IGNITE-6663:
---------------------------------------

             Summary: 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
             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
(v6.4.14#64029)