diff --git a/src/storage/record_accessor.hpp b/src/storage/record_accessor.hpp
index a2cee9cb8..2e62a4326 100644
--- a/src/storage/record_accessor.hpp
+++ b/src/storage/record_accessor.hpp
@@ -87,6 +87,16 @@ class RecordAccessor {
           handler,
       std::function<void()> finish = {}) const;
 
+  /**
+   * This should be used with care as it's comparing vlist_ pointer records and
+   * not actual values inside RecordAccessors.
+   */
+  friend bool operator<(const RecordAccessor& a, const RecordAccessor& b) {
+    assert(&a.db_accessor_ ==
+           &b.db_accessor_);  // assume the same db_accessor / transaction
+    return &a.vlist_ < &b.vlist_;
+  }
+
   friend bool operator==(const RecordAccessor& a, const RecordAccessor& b) {
     assert(&a.db_accessor_ ==
            &b.db_accessor_);  // assume the same db_accessor / transaction
diff --git a/tests/unit/record_edge_vertex_accessor.cpp b/tests/unit/record_edge_vertex_accessor.cpp
index 3c82d6787..1827aef58 100644
--- a/tests/unit/record_edge_vertex_accessor.cpp
+++ b/tests/unit/record_edge_vertex_accessor.cpp
@@ -58,6 +58,41 @@ TEST(RecordAccessor, RecordEquality) {
   EXPECT_NE(e1, e2);
 }
 
+TEST(RecordAccessor, RecordLessThan) {
+  Dbms dbms;
+  GraphDbAccessor dba = dbms.active();
+
+  auto v1 = dba.insert_vertex();
+  auto v2 = dba.insert_vertex();
+  EXPECT_NE(v1, v2);
+  EXPECT_TRUE(v1 < v2 || v2 < v1);
+  EXPECT_FALSE(v1 < v1);
+  EXPECT_FALSE(v2 < v2);
+  auto e1 = dba.insert_edge(v1, v2, dba.edge_type("type"));
+  auto e2 = dba.insert_edge(v1, v2, dba.edge_type("type"));
+  EXPECT_NE(e1, e2);
+  EXPECT_TRUE(e1 < e2 || e2 < e1);
+  EXPECT_FALSE(e1 < e1);
+  EXPECT_FALSE(e2 < e2);
+
+  std::vector<VertexAccessor> vertices = dba.vertices();
+  std::vector<VertexAccessor*> A;
+  for (int i = 0; i < vertices.size(); ++i) A.push_back(&vertices[i]);
+  std::sort(A.begin(), A.end(),
+            [](const VertexAccessor* a, const VertexAccessor* b) -> bool {
+              return *a < *b;
+            });
+
+  std::vector<VertexAccessor*> B;
+  for (int i = 0; i < vertices.size(); ++i) B.push_back(&vertices[i]);
+  std::sort(B.begin(), B.end(),
+            [](const VertexAccessor* a, const VertexAccessor* b) -> bool {
+              return *a < *b;
+            });
+
+  for (int i = 0; i < A.size(); ++i) EXPECT_EQ(*A[i], *B[i]);
+}
+
 TEST(RecordAccessor, VertexLabels) {
   Dbms dbms;
   GraphDbAccessor dba = dbms.active();