diff --git a/changelogs/unreleased/gh-6421-wrong-count.md b/changelogs/unreleased/gh-6421-wrong-count.md
new file mode 100644
index 0000000000000000000000000000000000000000..d1189c30d4d45793877df1914ce9fd98e35a98f6
--- /dev/null
+++ b/changelogs/unreleased/gh-6421-wrong-count.md
@@ -0,0 +1,3 @@
+## bugfix/core
+
+* Fixed a bug which resulted in wrong space count (gh-6421).
diff --git a/src/box/memtx_tx.c b/src/box/memtx_tx.c
index f74d6e9d8581dda16cae25b7a3263d2002152cd7..2cfd2cf00f4417cb5bdc61fbc49177fbd03c2050 100644
--- a/src/box/memtx_tx.c
+++ b/src/box/memtx_tx.c
@@ -1966,7 +1966,8 @@ memtx_tx_index_invisible_count_slow(struct txn *txn,
 			assert(index->dense_id < lookup->index_count);
 			bool unused;
 			if (memtx_tx_story_is_visible(lookup, txn,
-						      &visible, true, &unused))
+						      &visible, txn != NULL,
+						      &unused))
 				break;
 		}
 		if (visible == NULL)
diff --git a/test/box-luatest/gh_6421_mvcc_wrong_index_count_test.lua b/test/box-luatest/gh_6421_mvcc_wrong_index_count_test.lua
new file mode 100644
index 0000000000000000000000000000000000000000..5279e16efbaacd3ab812bf11dfd323b29a4953ee
--- /dev/null
+++ b/test/box-luatest/gh_6421_mvcc_wrong_index_count_test.lua
@@ -0,0 +1,81 @@
+local server = require('test.luatest_helpers.server')
+local t = require('luatest')
+
+local g = t.group()
+
+g.before_all = function()
+    g.server = server:new{
+        alias   = 'default',
+        box_cfg = {memtx_use_mvcc_engine = true}
+    }
+    g.server:start()
+end
+
+g.after_all = function()
+    g.server:drop()
+end
+
+g.before_each(function()
+    g.server:exec(function()
+        local s = box.schema.space.create('test')
+        s:create_index('primary')
+    end)
+end)
+
+g.after_each(function()
+    g.server:exec(function() box.space.test:drop() end)
+end)
+
+g.test_mvcc_wrong_space_count_simple = function()
+    g.server:exec(function()
+        local t = require('luatest')
+        local fiber = require('fiber')
+        local s = box.space.test
+
+        local f = fiber.create(function()
+            fiber.self():set_joinable(true)
+            s:insert{1}
+        end)
+
+        -- Unconfirmed TX is not visible.
+        t.assert_equals(s:select(), {})
+        t.assert_equals(s:count(), 0)
+
+        f:join()
+
+        -- Confirmed TX is visible.
+        t.assert_equals(s:select(), {{1}})
+        t.assert_equals(s:count(), 1)
+    end)
+end
+
+g.test_mvcc_wrong_space_count_rw_tx = function()
+    g.server:exec(function()
+        local t = require('luatest')
+        local fiber = require('fiber')
+        local s = box.space.test
+
+        local f1 = fiber.create(function()
+            fiber.self():set_joinable(true)
+            s:insert{1}
+        end)
+
+        local fiber_select = nil
+        local fiber_count = nil
+        local f2 = fiber.create(function()
+            fiber.self():set_joinable(true)
+            box.begin()
+            s:insert{2}
+            fiber_select = s:select()
+            fiber_count = s:count()
+            box.commit()
+        end)
+
+        -- RW transaction must see unconfirmed statements
+        t.assert_equals(fiber_select, {{1}, {2}})
+        t.assert_equals(fiber_count, 2)
+
+        f1:join()
+        f2:join()
+    end)
+end