diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c
index 3d5198e234..336b4f22ac 100644
--- a/src/backend/commands/explain.c
+++ b/src/backend/commands/explain.c
@@ -3186,6 +3186,13 @@ show_resultcache_info(ResultCacheState *rcstate, List *ancestors,
 
 		si = &rcstate->shared_info->sinstrument[n];
 
+		/*
+		 * Skip workers that didn't do any work.  We needn't bother checking
+		 * for cache hits as a miss will always occur before a cache hit.
+		 */
+		if (si->cache_misses == 0)
+			continue;
+
 		if (es->workers_state)
 			ExplainOpenWorker(n, es);
 
diff --git a/src/test/regress/expected/partition_prune.out b/src/test/regress/expected/partition_prune.out
index 1a7149bfd5..2c62e4a7a6 100644
--- a/src/test/regress/expected/partition_prune.out
+++ b/src/test/regress/expected/partition_prune.out
@@ -1958,9 +1958,6 @@ begin
         ln := regexp_replace(ln, 'Workers Launched: \d+', 'Workers Launched: N');
         ln := regexp_replace(ln, 'actual rows=\d+ loops=\d+', 'actual rows=N loops=N');
         ln := regexp_replace(ln, 'Rows Removed by Filter: \d+', 'Rows Removed by Filter: N');
-        ln := regexp_replace(ln, 'Hits: \d+', 'Hits: N');
-        ln := regexp_replace(ln, 'Misses: \d+', 'Misses: N');
-        ln := regexp_replace(ln, 'Memory Usage: \d+', 'Memory Usage: N');
         return next ln;
     end loop;
 end;
diff --git a/src/test/regress/expected/resultcache.out b/src/test/regress/expected/resultcache.out
index 7f4bf95f3f..5b5dd6838e 100644
--- a/src/test/regress/expected/resultcache.out
+++ b/src/test/regress/expected/resultcache.out
@@ -31,9 +31,6 @@ $$;
 -- Ensure we get a result cache on the inner side of the nested loop
 SET enable_hashjoin TO off;
 SET enable_bitmapscan TO off;
--- force_parallel_mode = regress can cause some instability in EXPLAIN ANALYZE
--- output, so let's ensure that we turn it off.
-SET force_parallel_mode TO off;
 SELECT explain_resultcache('
 SELECT COUNT(*),AVG(t1.unique1) FROM tenk1 t1
 INNER JOIN tenk1 t2 ON t1.unique1 = t2.twenty
@@ -118,7 +115,6 @@ WHERE t2.unique1 < 1200;', true);
 
 RESET enable_mergejoin;
 RESET work_mem;
-RESET force_parallel_mode;
 RESET enable_bitmapscan;
 RESET enable_hashjoin;
 -- Test parallel plans with Result Cache.
diff --git a/src/test/regress/sql/partition_prune.sql b/src/test/regress/sql/partition_prune.sql
index 247264f93b..16c8dc5f1f 100644
--- a/src/test/regress/sql/partition_prune.sql
+++ b/src/test/regress/sql/partition_prune.sql
@@ -464,9 +464,6 @@ begin
         ln := regexp_replace(ln, 'Workers Launched: \d+', 'Workers Launched: N');
         ln := regexp_replace(ln, 'actual rows=\d+ loops=\d+', 'actual rows=N loops=N');
         ln := regexp_replace(ln, 'Rows Removed by Filter: \d+', 'Rows Removed by Filter: N');
-        ln := regexp_replace(ln, 'Hits: \d+', 'Hits: N');
-        ln := regexp_replace(ln, 'Misses: \d+', 'Misses: N');
-        ln := regexp_replace(ln, 'Memory Usage: \d+', 'Memory Usage: N');
         return next ln;
     end loop;
 end;
diff --git a/src/test/regress/sql/resultcache.sql b/src/test/regress/sql/resultcache.sql
index 3fede90b00..43a70d56a5 100644
--- a/src/test/regress/sql/resultcache.sql
+++ b/src/test/regress/sql/resultcache.sql
@@ -33,9 +33,7 @@ $$;
 -- Ensure we get a result cache on the inner side of the nested loop
 SET enable_hashjoin TO off;
 SET enable_bitmapscan TO off;
--- force_parallel_mode = regress can cause some instability in EXPLAIN ANALYZE
--- output, so let's ensure that we turn it off.
-SET force_parallel_mode TO off;
+
 SELECT explain_resultcache('
 SELECT COUNT(*),AVG(t1.unique1) FROM tenk1 t1
 INNER JOIN tenk1 t2 ON t1.unique1 = t2.twenty
@@ -69,7 +67,6 @@ INNER JOIN tenk1 t2 ON t1.unique1 = t2.thousand
 WHERE t2.unique1 < 1200;', true);
 RESET enable_mergejoin;
 RESET work_mem;
-RESET force_parallel_mode;
 RESET enable_bitmapscan;
 RESET enable_hashjoin;
 
