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)