You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by al...@apache.org on 2022/09/27 12:02:37 UTC

[ignite] branch master updated: IGNITE-17764 Fix performance drop on index find operation - Fixes #10269.

This is an automated email from the ASF dual-hosted git repository.

alexpl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 3b0b5ed9a41 IGNITE-17764 Fix performance drop on index find operation - Fixes #10269.
3b0b5ed9a41 is described below

commit 3b0b5ed9a41fd9f3249f8c42bb59ba0e3ceb55d1
Author: Aleksey Plekhanov <pl...@gmail.com>
AuthorDate: Tue Sep 27 14:58:17 2022 +0300

    IGNITE-17764 Fix performance drop on index find operation - Fixes #10269.
    
    Signed-off-by: Aleksey Plekhanov <pl...@gmail.com>
---
 .../benchmarks/jmh/tree/IndexFindBenchmark.java    | 209 +++++++++++++++++++++
 .../cache/query/index/sorted/IndexKeyType.java     |   5 +-
 ...partorImpl.java => IndexRowComparatorImpl.java} |  14 +-
 .../query/index/sorted/QueryIndexDefinition.java   |   2 +-
 .../query/index/sorted/QueryIndexRowHandler.java   |   5 +-
 .../query/index/sorted/inline/InlineIndexTree.java |   7 +-
 .../inline/types/BooleanInlineIndexKeyType.java    |   7 +-
 .../inline/types/ByteInlineIndexKeyType.java       |   7 +-
 .../inline/types/DoubleInlineIndexKeyType.java     |   7 +-
 .../inline/types/FloatInlineIndexKeyType.java      |   7 +-
 .../inline/types/IntegerInlineIndexKeyType.java    |   7 +-
 .../inline/types/LongInlineIndexKeyType.java       |   7 +-
 .../inline/types/NumericInlineIndexKeyType.java    |   8 -
 .../inline/types/ShortInlineIndexKeyType.java      |   7 +-
 .../query/index/sorted/keys/BooleanIndexKey.java   |   2 +-
 .../query/index/sorted/keys/ByteIndexKey.java      |   3 +-
 .../query/index/sorted/keys/DateIndexKey.java      |   3 +-
 .../query/index/sorted/keys/DecimalIndexKey.java   |   2 +-
 .../query/index/sorted/keys/DoubleIndexKey.java    |   2 +-
 .../query/index/sorted/keys/FloatIndexKey.java     |   2 +-
 .../cache/query/index/sorted/keys/IndexKey.java    |   4 +-
 .../query/index/sorted/keys/IntegerIndexKey.java   |  12 +-
 .../index/sorted/keys/JavaObjectIndexKey.java      |   5 -
 .../query/index/sorted/keys/LongIndexKey.java      |  13 +-
 .../query/index/sorted/keys/NullIndexKey.java      |  10 -
 .../query/index/sorted/keys/ShortIndexKey.java     |  13 +-
 .../query/index/sorted/keys/StringIndexKey.java    |  11 --
 .../query/index/sorted/keys/TimeIndexKey.java      |  10 -
 .../query/index/sorted/keys/TimestampIndexKey.java |  11 --
 .../query/index/sorted/keys/UuidIndexKey.java      |  10 -
 .../cache/query/reducer/IndexQueryReducer.java     |   4 +-
 31 files changed, 264 insertions(+), 152 deletions(-)

diff --git a/modules/benchmarks/src/main/java/org/apache/ignite/internal/benchmarks/jmh/tree/IndexFindBenchmark.java b/modules/benchmarks/src/main/java/org/apache/ignite/internal/benchmarks/jmh/tree/IndexFindBenchmark.java
new file mode 100644
index 00000000000..0b215f945a0
--- /dev/null
+++ b/modules/benchmarks/src/main/java/org/apache/ignite/internal/benchmarks/jmh/tree/IndexFindBenchmark.java
@@ -0,0 +1,209 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.benchmarks.jmh.tree;
+
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.concurrent.TimeUnit;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteDataStreamer;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.cache.query.annotations.QuerySqlField;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
+import org.apache.ignite.internal.cache.query.index.sorted.IndexRow;
+import org.apache.ignite.internal.cache.query.index.sorted.IndexSearchRowImpl;
+import org.apache.ignite.internal.cache.query.index.sorted.inline.InlineIndex;
+import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
+import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKeyFactory;
+import org.apache.ignite.internal.util.lang.GridCursor;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Fork;
+import org.openjdk.jmh.annotations.Level;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.TearDown;
+import org.openjdk.jmh.annotations.Warmup;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+/**
+ * Index find benchmark.
+ */
+@State(Scope.Benchmark)
+@Fork(1)
+@BenchmarkMode(Mode.Throughput)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@Warmup(iterations = 3, time = 3)
+@Measurement(iterations = 5, time = 10)
+public class IndexFindBenchmark {
+    /** Items count. */
+    private static final int CNT = 1_000_000;
+
+    /** Items in each range. */
+    private static final int RANGE = 1;
+
+    /** Cache name. */
+    private static final String CACHE_NAME = "cache";
+
+    /** Ignite. */
+    private IgniteEx ignite;
+
+    /** */
+    InlineIndex idxId;
+
+    /** */
+    InlineIndex idxName;
+
+    /** */
+    InlineIndex idxSalary;
+
+    /** */
+    @Benchmark
+    public void findOneIndex() {
+        int key = ThreadLocalRandom.current().nextInt(CNT - RANGE);
+
+        find(idxSalary, searchRowSalary(key), searchRowSalary(key + RANGE));
+    }
+
+    /** */
+    @Benchmark
+    public void findThreeIndexes() {
+        int key = ThreadLocalRandom.current().nextInt(CNT);
+
+        find(idxId, searchRowId(key), searchRowId(key + RANGE));
+        find(idxName, searchRowName(key), searchRowName(key + RANGE));
+        find(idxSalary, searchRowSalary(key), searchRowSalary(key + RANGE));
+    }
+
+    /** */
+    private static void find(InlineIndex idx, IndexRow lower, IndexRow upper) {
+        try {
+            GridCursor<IndexRow> cur = idx.find(lower, upper, true, false, 0, null);
+
+            int cnt = 0;
+
+            while (cur.next())
+                cnt++;
+
+            assert cnt == RANGE;
+        }
+        catch (IgniteCheckedException e) {
+            throw new AssertionError(e);
+        }
+    }
+
+    /** */
+    private static IndexRow searchRow(Object key, IndexKeyType type) {
+        IndexKey[] keys = new IndexKey[] { IndexKeyFactory.wrap(key, type, null, null), null };
+        return new IndexSearchRowImpl(keys, null);
+    }
+
+    /** */
+    private static IndexRow searchRowId(int key) {
+        return searchRow(key, IndexKeyType.INT);
+    }
+
+    /** */
+    private static IndexRow searchRowName(int key) {
+        return searchRow("name" + String.format("%07d", key), IndexKeyType.STRING);
+    }
+
+    /** */
+    private static IndexRow searchRowSalary(int key) {
+        return searchRow(key * 1_000d, IndexKeyType.DOUBLE);
+    }
+
+    /**
+     * Initiate Ignite and caches.
+     */
+    @Setup(Level.Trial)
+    public void setup() {
+        ignite = (IgniteEx)Ignition.start(new IgniteConfiguration().setIgniteInstanceName("test"));
+
+        CacheConfiguration<Integer, Person> cfg = new CacheConfiguration<>(CACHE_NAME);
+        cfg.setIndexedTypes(Integer.class, Person.class);
+
+        ignite.getOrCreateCache(cfg);
+
+        try (IgniteDataStreamer<Integer, Person> dataLdr = ignite.dataStreamer(CACHE_NAME)) {
+            for (int i = 0; i < CNT; i++)
+                dataLdr.addData(i, new Person(i, "name" + String.format("%07d", i), i * 1_000d));
+        }
+
+        for (InlineIndex idx : ignite.context().indexProcessor().treeIndexes(CACHE_NAME, true)) {
+            if (idx.name().contains("_ID_"))
+                idxId = idx;
+            else if (idx.name().contains("_NAME_"))
+                idxName = idx;
+            else if (idx.name().contains("_SALARY_"))
+                idxSalary = idx;
+        }
+    }
+
+    /**
+     * Stop Ignite instance.
+     */
+    @TearDown
+    public void tearDown() {
+        ignite.close();
+    }
+
+    /**
+     * Run benchmarks.
+     *
+     * @param args Args.
+     * @throws Exception Exception.
+     */
+    public static void main(String[] args) throws Exception {
+        final Options options = new OptionsBuilder()
+            .include(IndexFindBenchmark.class.getSimpleName())
+            .build();
+
+        new Runner(options).run();
+    }
+
+    /** */
+    private static class Person {
+        /** */
+        @QuerySqlField(index = true)
+        private final int id;
+
+        /** */
+        @QuerySqlField(index = true)
+        private final String name;
+
+        /** */
+        @QuerySqlField(index = true)
+        private final double salary;
+
+        /** */
+        private Person(int id, String name, double salary) {
+            this.id = id;
+            this.name = name;
+            this.salary = salary;
+        }
+    }
+}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexKeyType.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexKeyType.java
index ef84f7748eb..838acace5d0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexKeyType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexKeyType.java
@@ -32,7 +32,6 @@ import java.util.Collections;
 import java.util.Comparator;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.internal.processors.query.QueryUtils;
-import org.apache.ignite.internal.util.typedef.internal.A;
 import org.apache.ignite.internal.util.typedef.internal.U;
 
 /**
@@ -187,8 +186,8 @@ public enum IndexKeyType {
         if (code == UNKNOWN.code)
             return UNKNOWN;
 
-        A.ensure(code >= 0 && code < keyTypesByCode.length,
-            "code >= 0 && code < keyTypesByCode.length [code=" + code + ']');
+        if (code < 0 || code >= keyTypesByCode.length)
+            throw new IllegalArgumentException("Argument is invalid: " + code);
 
         return keyTypesByCode[code];
     }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexRowCompartorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexRowComparatorImpl.java
similarity index 88%
rename from modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexRowCompartorImpl.java
rename to modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexRowComparatorImpl.java
index c750d0d0bbf..859ad842974 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexRowCompartorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexRowComparatorImpl.java
@@ -33,24 +33,26 @@ import static org.apache.ignite.internal.cache.query.index.sorted.inline.types.N
  * 1. NULL is the least value.
  * 2. Comparison of different types is not supported.
  */
-public class IndexRowCompartorImpl implements IndexRowComparator {
+public class IndexRowComparatorImpl implements IndexRowComparator {
     /** Key type settings for this index. */
     protected final IndexKeyTypeSettings keyTypeSettings;
 
     /** */
-    public IndexRowCompartorImpl(IndexKeyTypeSettings settings) {
+    public IndexRowComparatorImpl(IndexKeyTypeSettings settings) {
         keyTypeSettings = settings;
     }
 
     /** {@inheritDoc} */
     @Override public int compareKey(long pageAddr, int off, int maxSize, IndexKey key, InlineIndexKeyType type) {
-        if (type.type() == IndexKeyType.UNKNOWN)
+        IndexKeyType inlineKeyType = type.type();
+
+        if (inlineKeyType == IndexKeyType.UNKNOWN)
             return CANT_BE_COMPARE;
 
         // Value can be set up by user in query with different data type. Don't compare uncomparable types in this comparator.
-        if (isInlineComparable(type, key)) {
+        if (inlineKeyType == key.type() || isInlineComparable(type, key)) {
             // If inlining of POJO is not supported then don't compare it here.
-            if (type.type() != IndexKeyType.JAVA_OBJECT || keyTypeSettings.inlineObjSupported())
+            if (inlineKeyType != IndexKeyType.JAVA_OBJECT || keyTypeSettings.inlineObjSupported())
                 return type.compare(pageAddr, off, maxSize, key);
             else
                 return CANT_BE_COMPARE;
@@ -88,7 +90,7 @@ public class IndexRowCompartorImpl implements IndexRowComparator {
             else if (rkey == NullIndexKey.INSTANCE)
                 return 1;
 
-            if (lkey.isComparableTo(rkey))
+            if (lkey.type() == rkey.type() || lkey.isComparableTo(rkey))
                 return lkey.compare(rkey);
             else if (rkey.isComparableTo(lkey))
                 return -rkey.compare(lkey);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/QueryIndexDefinition.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/QueryIndexDefinition.java
index 626727acb84..933ebf16c4f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/QueryIndexDefinition.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/QueryIndexDefinition.java
@@ -89,7 +89,7 @@ public class QueryIndexDefinition implements SortedIndexDefinition {
         this.isAffinity = isAffinity;
         this.keyDefs = keyDefs;
         this.keyTypeSettings = keyTypeSettings;
-        this.rowComparator = new IndexRowCompartorImpl(keyTypeSettings);
+        this.rowComparator = new IndexRowComparatorImpl(keyTypeSettings);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/QueryIndexRowHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/QueryIndexRowHandler.java
index 7a7d4e69dbe..58ba2dfdcdb 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/QueryIndexRowHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/QueryIndexRowHandler.java
@@ -18,7 +18,6 @@
 package org.apache.ignite.internal.cache.query.index.sorted;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 import org.apache.ignite.IgniteCheckedException;
@@ -60,8 +59,8 @@ public class QueryIndexRowHandler implements InlineIndexRowHandler {
         List<InlineIndexKeyType> keyTypes,
         IndexKeyTypeSettings keyTypeSettings
     ) {
-        this.keyTypes = Collections.unmodifiableList(keyTypes);
-        this.keyDefs = Collections.unmodifiableList(new ArrayList<>(keyDefs.values()));
+        this.keyTypes = new ArrayList<>(keyTypes);
+        this.keyDefs = new ArrayList<>(keyDefs.values());
 
         props = new GridQueryProperty[keyDefs.size()];
         int propIdx = 0;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndexTree.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndexTree.java
index 8f24a4a5c0e..b2641fa93ed 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndexTree.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndexTree.java
@@ -271,8 +271,7 @@ public class InlineIndexTree extends BPlusTree<IndexRow, IndexRow> {
         int off = io.offset(idx);
 
         List<IndexKeyDefinition> keyDefs = rowHnd.indexKeyDefinitions();
-
-        List<InlineIndexKeyType> keyTypes = rowHandler().inlineIndexKeyTypes();
+        List<InlineIndexKeyType> keyTypes = rowHnd.inlineIndexKeyTypes();
 
         for (keyIdx = 0; keyIdx < keyTypes.size(); keyIdx++) {
             try {
@@ -281,10 +280,6 @@ public class InlineIndexTree extends BPlusTree<IndexRow, IndexRow> {
                 if (row.key(keyIdx) == null)
                     return 0;
 
-                // Other keys are not inlined. Should compare as rows.
-                if (keyIdx >= keyTypes.size())
-                    break;
-
                 int maxSize = inlineSize - fieldOff;
 
                 InlineIndexKeyType keyType = keyTypes.get(keyIdx);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/BooleanInlineIndexKeyType.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/BooleanInlineIndexKeyType.java
index 8dd4b211249..ab96937a376 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/BooleanInlineIndexKeyType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/BooleanInlineIndexKeyType.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.cache.query.index.sorted.inline.types;
 
 import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
 import org.apache.ignite.internal.cache.query.index.sorted.keys.BooleanIndexKey;
+import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
 import org.apache.ignite.internal.cache.query.index.sorted.keys.NumericIndexKey;
 import org.apache.ignite.internal.pagemem.PageUtils;
 
@@ -47,9 +48,9 @@ public class BooleanInlineIndexKeyType extends NumericInlineIndexKeyType<Boolean
     }
 
     /** {@inheritDoc} */
-    @Override public int compareNumeric(NumericIndexKey key, long pageAddr, int off) {
-        boolean bool1 = PageUtils.getByte(pageAddr, off + 1) != 0;
+    @Override public int compare0(long pageAddr, int off, IndexKey key) {
+        boolean val = PageUtils.getByte(pageAddr, off + 1) != 0;
 
-        return key.compareTo(bool1);
+        return -Integer.signum(((NumericIndexKey)key).compareTo(val));
     }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ByteInlineIndexKeyType.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ByteInlineIndexKeyType.java
index 3290925f457..3163b09f70d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ByteInlineIndexKeyType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ByteInlineIndexKeyType.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.cache.query.index.sorted.inline.types;
 
 import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
 import org.apache.ignite.internal.cache.query.index.sorted.keys.ByteIndexKey;
+import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
 import org.apache.ignite.internal.cache.query.index.sorted.keys.NumericIndexKey;
 import org.apache.ignite.internal.pagemem.PageUtils;
 
@@ -32,10 +33,10 @@ public class ByteInlineIndexKeyType extends NumericInlineIndexKeyType<ByteIndexK
     }
 
     /** {@inheritDoc} */
-    @Override public int compareNumeric(NumericIndexKey key, long pageAddr, int off) {
-        byte byte1 = PageUtils.getByte(pageAddr, off + 1);
+    @Override public int compare0(long pageAddr, int off, IndexKey key) {
+        byte val = PageUtils.getByte(pageAddr, off + 1);
 
-        return key.compareTo(byte1);
+        return -Integer.signum(((NumericIndexKey)key).compareTo(val));
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/DoubleInlineIndexKeyType.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/DoubleInlineIndexKeyType.java
index 1fedcd7b43c..d8889b84492 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/DoubleInlineIndexKeyType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/DoubleInlineIndexKeyType.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.cache.query.index.sorted.inline.types;
 
 import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
 import org.apache.ignite.internal.cache.query.index.sorted.keys.DoubleIndexKey;
+import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
 import org.apache.ignite.internal.cache.query.index.sorted.keys.NumericIndexKey;
 import org.apache.ignite.internal.pagemem.PageUtils;
 
@@ -32,10 +33,10 @@ public class DoubleInlineIndexKeyType extends NumericInlineIndexKeyType<DoubleIn
     }
 
     /** {@inheritDoc} */
-    @Override public int compareNumeric(NumericIndexKey key, long pageAddr, int off) {
-        double val1 = Double.longBitsToDouble(PageUtils.getLong(pageAddr, off + 1));
+    @Override public int compare0(long pageAddr, int off, IndexKey key) {
+        double val = Double.longBitsToDouble(PageUtils.getLong(pageAddr, off + 1));
 
-        return key.compareTo(val1);
+        return -Integer.signum(((NumericIndexKey)key).compareTo(val));
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/FloatInlineIndexKeyType.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/FloatInlineIndexKeyType.java
index 5d1bc4912a4..243e2fddf18 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/FloatInlineIndexKeyType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/FloatInlineIndexKeyType.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.cache.query.index.sorted.inline.types;
 
 import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
 import org.apache.ignite.internal.cache.query.index.sorted.keys.FloatIndexKey;
+import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
 import org.apache.ignite.internal.cache.query.index.sorted.keys.NumericIndexKey;
 import org.apache.ignite.internal.pagemem.PageUtils;
 
@@ -32,10 +33,10 @@ public class FloatInlineIndexKeyType extends NumericInlineIndexKeyType<FloatInde
     }
 
     /** {@inheritDoc} */
-    @Override public int compareNumeric(NumericIndexKey key, long pageAddr, int off) {
-        float val1 = Float.intBitsToFloat(PageUtils.getInt(pageAddr, off + 1));
+    @Override public int compare0(long pageAddr, int off, IndexKey key) {
+        float val = Float.intBitsToFloat(PageUtils.getInt(pageAddr, off + 1));
 
-        return key.compareTo(val1);
+        return -Integer.signum(((NumericIndexKey)key).compareTo(val));
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/IntegerInlineIndexKeyType.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/IntegerInlineIndexKeyType.java
index b7df5ea9a21..01e8edf4031 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/IntegerInlineIndexKeyType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/IntegerInlineIndexKeyType.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.cache.query.index.sorted.inline.types;
 
 import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
+import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
 import org.apache.ignite.internal.cache.query.index.sorted.keys.IntegerIndexKey;
 import org.apache.ignite.internal.cache.query.index.sorted.keys.NumericIndexKey;
 import org.apache.ignite.internal.pagemem.PageUtils;
@@ -49,9 +50,9 @@ public class IntegerInlineIndexKeyType extends NumericInlineIndexKeyType<Integer
     }
 
     /** {@inheritDoc} */
-    @Override public int compareNumeric(NumericIndexKey key, long pageAddr, int off) {
-        int val1 = PageUtils.getInt(pageAddr, off + 1);
+    @Override public int compare0(long pageAddr, int off, IndexKey key) {
+        int val = PageUtils.getInt(pageAddr, off + 1);
 
-        return key.compareTo(val1);
+        return -Integer.signum(((NumericIndexKey)key).compareTo(val));
     }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/LongInlineIndexKeyType.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/LongInlineIndexKeyType.java
index c0e05b29421..bb40f51c3cf 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/LongInlineIndexKeyType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/LongInlineIndexKeyType.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.cache.query.index.sorted.inline.types;
 
 import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
+import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
 import org.apache.ignite.internal.cache.query.index.sorted.keys.LongIndexKey;
 import org.apache.ignite.internal.cache.query.index.sorted.keys.NumericIndexKey;
 import org.apache.ignite.internal.pagemem.PageUtils;
@@ -49,9 +50,9 @@ public class LongInlineIndexKeyType extends NumericInlineIndexKeyType<LongIndexK
     }
 
     /** {@inheritDoc} */
-    @Override public int compareNumeric(NumericIndexKey key, long pageAddr, int off) {
-        long val1 = PageUtils.getLong(pageAddr, off + 1);
+    @Override public int compare0(long pageAddr, int off, IndexKey key) {
+        long val = PageUtils.getLong(pageAddr, off + 1);
 
-        return key.compareTo(val1);
+        return -Integer.signum(((NumericIndexKey)key).compareTo(val));
     }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/NumericInlineIndexKeyType.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/NumericInlineIndexKeyType.java
index 52aa5e5f259..9164065a8e7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/NumericInlineIndexKeyType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/NumericInlineIndexKeyType.java
@@ -35,14 +35,6 @@ public abstract class NumericInlineIndexKeyType<T extends IndexKey> extends Null
         return key instanceof NumericIndexKey;
     }
 
-    /** {@inheritDoc} */
-    @Override public int compare0(long pageAddr, int off, IndexKey key) {
-        return -Integer.signum(compareNumeric((NumericIndexKey)key, pageAddr, off));
-    }
-
-    /** Compare numeric index key with inlined value. */
-    public abstract int compareNumeric(NumericIndexKey key, long pageAddr, int off);
-
     /** {@inheritDoc} */
     @Override protected int inlineSize0(T key) {
         return keySize + 1;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ShortInlineIndexKeyType.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ShortInlineIndexKeyType.java
index 7aa72dbcd6d..630347d1e1a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ShortInlineIndexKeyType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ShortInlineIndexKeyType.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.cache.query.index.sorted.inline.types;
 
 import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
+import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
 import org.apache.ignite.internal.cache.query.index.sorted.keys.NumericIndexKey;
 import org.apache.ignite.internal.cache.query.index.sorted.keys.ShortIndexKey;
 import org.apache.ignite.internal.pagemem.PageUtils;
@@ -32,10 +33,10 @@ public class ShortInlineIndexKeyType extends NumericInlineIndexKeyType<ShortInde
     }
 
     /** {@inheritDoc} */
-    @Override public int compareNumeric(NumericIndexKey key, long pageAddr, int off) {
-        short val1 = PageUtils.getShort(pageAddr, off + 1);
+    @Override public int compare0(long pageAddr, int off, IndexKey key) {
+        short val = PageUtils.getShort(pageAddr, off + 1);
 
-        return key.compareTo(val1);
+        return -Integer.signum(((NumericIndexKey)key).compareTo(val));
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/BooleanIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/BooleanIndexKey.java
index 202dea0905d..833ed63d1ee 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/BooleanIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/BooleanIndexKey.java
@@ -82,7 +82,7 @@ public class BooleanIndexKey extends NumericIndexKey {
 
     /** {@inheritDoc} */
     @Override public int compare(IndexKey o) {
-        return o.type() == type() ? Boolean.compare(key, ((BooleanIndexKey)o).key) : -((NumericIndexKey)o).compareTo(key);
+        return -((NumericIndexKey)o).compareTo(key);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/ByteIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/ByteIndexKey.java
index 1e02ab367e5..8643e067383 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/ByteIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/ByteIndexKey.java
@@ -82,8 +82,7 @@ public class ByteIndexKey extends NumericIndexKey {
 
     /** {@inheritDoc} */
     @Override public int compare(IndexKey o) {
-        return o.type() == type() ? Integer.signum(Byte.compare(key, ((ByteIndexKey)o).key))
-            : -((NumericIndexKey)o).compareTo(key);
+        return -((NumericIndexKey)o).compareTo(key);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DateIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DateIndexKey.java
index 196c9b49018..c7bdd3f620e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DateIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DateIndexKey.java
@@ -74,8 +74,7 @@ public class DateIndexKey extends DateTimeIndexKey {
 
     /** {@inheritDoc} */
     @Override public int compare(IndexKey o) {
-        return type() == o.type() ? Long.compare(dateVal, ((DateIndexKey)o).dateVal)
-            : -((DateTimeIndexKey)o).compareTo(dateVal, 0);
+        return -((DateTimeIndexKey)o).compareTo(dateVal, 0);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DecimalIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DecimalIndexKey.java
index 84e0973cd2f..9a997cd6c32 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DecimalIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DecimalIndexKey.java
@@ -82,7 +82,7 @@ public class DecimalIndexKey extends NumericIndexKey {
 
     /** {@inheritDoc} */
     @Override public int compare(IndexKey o) {
-        return o.type() == type() ? key.compareTo((BigDecimal)o.key()) : -((NumericIndexKey)o).compareTo(key);
+        return -((NumericIndexKey)o).compareTo(key);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DoubleIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DoubleIndexKey.java
index 669c4e759b8..8f585a5d294 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DoubleIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DoubleIndexKey.java
@@ -82,7 +82,7 @@ public class DoubleIndexKey extends NumericIndexKey {
 
     /** {@inheritDoc} */
     @Override public int compare(IndexKey o) {
-        return o.type() == type() ? Double.compare(key, ((DoubleIndexKey)o).key) : -((NumericIndexKey)o).compareTo(key);
+        return -((NumericIndexKey)o).compareTo(key);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/FloatIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/FloatIndexKey.java
index c73f1edd103..a4db3ee780d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/FloatIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/FloatIndexKey.java
@@ -82,7 +82,7 @@ public class FloatIndexKey extends NumericIndexKey {
 
     /** {@inheritDoc} */
     @Override public int compare(IndexKey o) {
-        return o.type() == type() ? Float.compare(key, ((FloatIndexKey)o).key) : -((NumericIndexKey)o).compareTo(key);
+        return -((NumericIndexKey)o).compareTo(key);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IndexKey.java
index 9c230ab119b..fa42cb95ab3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IndexKey.java
@@ -40,9 +40,9 @@ public interface IndexKey {
     public int compare(IndexKey o) throws IgniteCheckedException;
 
     /**
-     * @return {@code True} if index key can be compared to another index key.
+     * @return {@code True} if index key can be compared to another index key (in case keys have different types).
      */
     public default boolean isComparableTo(IndexKey k) {
-        return type() == k.type();
+        return false;
     }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IntegerIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IntegerIndexKey.java
index b5170566106..744f65e8642 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IntegerIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IntegerIndexKey.java
@@ -82,21 +82,11 @@ public class IntegerIndexKey extends NumericIndexKey {
 
     /** {@inheritDoc} */
     @Override public int compare(IndexKey o) {
-        return o.type() == type() ? Integer.compare(key, ((IntegerIndexKey)o).key) : -((NumericIndexKey)o).compareTo(key);
+        return -((NumericIndexKey)o).compareTo(key);
     }
 
     /** {@inheritDoc} */
     @Override public String toString() {
         return String.valueOf(key);
     }
-//
-//    /** {@inheritDoc} */
-//    @Override public int hashCode() {
-//        return Integer.hashCode(key);
-//    }
-//
-//    /** {@inheritDoc} */
-//    @Override public boolean equals(Object o) {
-//        return o instanceof IntegerIndexKey && key == ((IntegerIndexKey)o).key;
-//    }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/JavaObjectIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/JavaObjectIndexKey.java
index 150401f1de7..3256faf6f7c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/JavaObjectIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/JavaObjectIndexKey.java
@@ -117,9 +117,4 @@ public abstract class JavaObjectIndexKey implements IndexKey {
     @Override public String toString() {
         return key().toString();
     }
-
-//    /** {@inheritDoc} */
-//    @Override public boolean equals(Object o) {
-//        return o instanceof JavaObjectIndexKey && compare((IndexKey)o) == 0;
-//    }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/LongIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/LongIndexKey.java
index 04ce8f014b7..80999bdac5e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/LongIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/LongIndexKey.java
@@ -82,22 +82,11 @@ public class LongIndexKey extends NumericIndexKey {
 
     /** {@inheritDoc} */
     @Override public int compare(IndexKey o) {
-        return o.type() == type() ? Long.compare(key, ((LongIndexKey)o).key) : -((NumericIndexKey)o).compareTo(key);
+        return -((NumericIndexKey)o).compareTo(key);
     }
 
     /** {@inheritDoc} */
     @Override public String toString() {
         return String.valueOf(key);
     }
-
-//    /** {@inheritDoc} */
-//    @Override public int hashCode() {
-//        return Long.hashCode(key);
-//    }
-//
-//    /** {@inheritDoc} */
-//    @Override public boolean equals(Object o) {
-//        return o instanceof LongIndexKey && key == ((LongIndexKey)o).key;
-//    }
-
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/NullIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/NullIndexKey.java
index 1da2125390d..a8aaa095ec6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/NullIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/NullIndexKey.java
@@ -48,14 +48,4 @@ public class NullIndexKey implements IndexKey {
     @Override public String toString() {
         return "null";
     }
-
-//    /** {@inheritDoc} */
-//    @Override public int hashCode() {
-//        return 0;
-//    }
-//
-//    /** {@inheritDoc} */
-//    @Override public boolean equals(Object o) {
-//        return o instanceof NullIndexKey;
-//    }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/ShortIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/ShortIndexKey.java
index a1db4935036..606ab73f310 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/ShortIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/ShortIndexKey.java
@@ -82,22 +82,11 @@ public class ShortIndexKey extends NumericIndexKey {
 
     /** {@inheritDoc} */
     @Override public int compare(IndexKey o) {
-        return o.type() == type() ? Integer.compare(key, ((ShortIndexKey)o).key) : -((NumericIndexKey)o).compareTo(key);
+        return -((NumericIndexKey)o).compareTo(key);
     }
 
     /** {@inheritDoc} */
     @Override public String toString() {
         return String.valueOf(key);
     }
-
-//    /** {@inheritDoc} */
-//    @Override public int hashCode() {
-//        return key;
-//    }
-//
-//    /** {@inheritDoc} */
-//    @Override public boolean equals(Object o) {
-//        return o instanceof ShortIndexKey && key == ((ShortIndexKey)o).key;
-//    }
-
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/StringIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/StringIndexKey.java
index c5368ba898f..3b136e14492 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/StringIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/StringIndexKey.java
@@ -50,16 +50,5 @@ public class StringIndexKey implements IndexKey {
     @Override public String toString() {
         return key;
     }
-
-//    /** {@inheritDoc} */
-//    @Override public int hashCode() {
-//        return key.hashCode();
-//    }
-//
-//    /** {@inheritDoc} */
-//    @Override public boolean equals(Object o) {
-//        return o instanceof StringIndexKey && compare((IndexKey)o) == 0;
-//    }
-
 }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/TimeIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/TimeIndexKey.java
index 7e2c31b0bb2..c0dd841f3c8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/TimeIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/TimeIndexKey.java
@@ -83,14 +83,4 @@ public class TimeIndexKey implements IndexKey {
     @Override public String toString() {
         return String.valueOf(nanos);
     }
-
-//    /** {@inheritDoc} */
-//    @Override public int hashCode() {
-//        return Long.hashCode(nanos);
-//    }
-//
-//    /** {@inheritDoc} */
-//    @Override public boolean equals(Object o) {
-//        return o instanceof TimeIndexKey && compare((IndexKey)o) == 0;
-//    }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/TimestampIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/TimestampIndexKey.java
index 8488f02764d..9bc2bb40407 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/TimestampIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/TimestampIndexKey.java
@@ -107,15 +107,4 @@ public class TimestampIndexKey extends DateTimeIndexKey {
     @Override public String toString() {
         return dateVal + " " + nanos;
     }
-//
-//    /** {@inheritDoc} */
-//    @Override public int hashCode() {
-//        return (int)(dateVal ^ dateVal >>> 32 ^ nanos ^ nanos >>> 32);
-//    }
-//
-//    /** {@inheritDoc} */
-//    @Override public boolean equals(Object o) {
-//        return o instanceof TimestampIndexKey && dateVal == ((TimestampIndexKey)o).dateVal && nanos == ((TimestampIndexKey)o).nanos;
-//    }
-
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/UuidIndexKey.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/UuidIndexKey.java
index 8f17c5a5533..ecb694c8ac5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/UuidIndexKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/UuidIndexKey.java
@@ -55,14 +55,4 @@ public class UuidIndexKey implements IndexKey {
     @Override public String toString() {
         return String.valueOf(key);
     }
-
-//    /** {@inheritDoc} */
-//    @Override public int hashCode() {
-//        return key.hashCode();
-//    }
-//
-//    /** {@inheritDoc} */
-//    @Override public boolean equals(Object o) {
-//        return o instanceof UuidIndexKey && compare((IndexKey)o) == 0;
-//    }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/reducer/IndexQueryReducer.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/reducer/IndexQueryReducer.java
index 724f69940b4..1a4d3c3a7c7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/reducer/IndexQueryReducer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/reducer/IndexQueryReducer.java
@@ -30,7 +30,7 @@ import org.apache.ignite.internal.cache.query.index.IndexQueryResultMeta;
 import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyDefinition;
 import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
 import org.apache.ignite.internal.cache.query.index.sorted.IndexRowComparator;
-import org.apache.ignite.internal.cache.query.index.sorted.IndexRowCompartorImpl;
+import org.apache.ignite.internal.cache.query.index.sorted.IndexRowComparatorImpl;
 import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
 import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKeyFactory;
 import org.apache.ignite.internal.processors.cache.GridCacheContext;
@@ -97,7 +97,7 @@ public class IndexQueryReducer<R> extends MergeSortCacheQueryReducer<R> {
         private final IndexQueryResultMeta meta;
 
         /** Every node will return the same key types for the same index, then it's possible to use simple comparator. */
-        private final IndexRowComparator idxRowComp = new IndexRowCompartorImpl(null);
+        private final IndexRowComparator idxRowComp = new IndexRowComparatorImpl(null);
 
         /** */
         IndexedNodePageComparator(