diff --git a/src/box/index.cc b/src/box/index.cc
index dbcaadb014bd5e278169cb2ed6ad36491caac2a0..32e276eb665b4c11b9485953e8ba2704bc414286 100644
--- a/src/box/index.cc
+++ b/src/box/index.cc
@@ -612,6 +612,7 @@ index_read_view_create(struct index_read_view *rv,
 	rv->def = index_def_dup(def);
 	if (rv->def == NULL)
 		return -1;
+	rv->space = NULL;
 	return 0;
 }
 
diff --git a/src/box/index.h b/src/box/index.h
index e7d4f26c52c197503591a51e0987ba90bc1f4205..757e5cf16a68238f9307d36b2ab72066bd22b294 100644
--- a/src/box/index.h
+++ b/src/box/index.h
@@ -44,6 +44,7 @@ extern "C" {
 struct tuple;
 struct engine;
 struct space;
+struct space_read_view;
 struct index;
 struct index_read_view;
 struct index_read_view_iterator;
@@ -586,6 +587,8 @@ struct index_read_view {
 	const struct index_read_view_vtab *vtab;
 	/** Copy of the index definition. */
 	struct index_def *def;
+	/** Pointer to the space read view that owns this index. */
+	struct space_read_view *space;
 };
 
 /** Iterator over an index read view. */
diff --git a/src/box/read_view.c b/src/box/read_view.c
index 56358fba9071cbe759a25bb610d1e1a0f50fb229..c99a1ea34e00b1b4531a63559fccd95b77672138 100644
--- a/src/box/read_view.c
+++ b/src/box/read_view.c
@@ -49,8 +49,10 @@ space_read_view_delete(struct space_read_view *space_rv)
 {
 	for (uint32_t i = 0; i <= space_rv->index_id_max; i++) {
 		struct index_read_view *index_rv = space_rv->index_map[i];
-		if (index_rv != NULL)
+		if (index_rv != NULL) {
+			assert(index_rv->space == space_rv);
 			index_read_view_delete(index_rv);
+		}
 	}
 	TRASH(space_rv);
 	free(space_rv);
@@ -84,6 +86,7 @@ space_read_view_new(struct space *space, const struct read_view_opts *opts)
 		space_rv->index_map[i] = index_create_read_view(index);
 		if (space_rv->index_map[i] == NULL)
 			goto fail;
+		space_rv->index_map[i]->space = space_rv;
 	}
 	return space_rv;
 fail: