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)

Reply via email to