| visitPhysicalIcebergTableSink(PhysicalIcebergTableSink, ShuffleKeyPruner.PruneCtx) |  | 0% |  | 0% | 3 | 3 | 6 | 6 | 1 | 1 |
| visitPhysicalMaxComputeTableSink(PhysicalMaxComputeTableSink, ShuffleKeyPruner.PruneCtx) |  | 0% |  | 0% | 3 | 3 | 5 | 5 | 1 | 1 |
| rewriteChildren(Plan, List) |   | 70% |   | 66% | 2 | 4 | 4 | 13 | 0 | 1 |
| visitPhysicalPartitionTopN(PhysicalPartitionTopN, ShuffleKeyPruner.PruneCtx) |  | 0% |  | 0% | 2 | 2 | 3 | 3 | 1 | 1 |
| visitPhysicalDictionarySink(PhysicalDictionarySink, ShuffleKeyPruner.PruneCtx) |  | 0% | | n/a | 1 | 1 | 3 | 3 | 1 | 1 |
| rewriteUnary(PhysicalUnary, ShuffleKeyPruner.PruneCtx) |   | 57% |   | 50% | 1 | 2 | 2 | 6 | 0 | 1 |
| visitPhysicalAssertNumRows(PhysicalAssertNumRows, ShuffleKeyPruner.PruneCtx) |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| visitPhysicalBlackholeSink(PhysicalBlackholeSink, ShuffleKeyPruner.PruneCtx) |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| visitPhysicalJdbcTableSink(PhysicalJdbcTableSink, ShuffleKeyPruner.PruneCtx) |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| visitPhysicalTVFTableSink(PhysicalTVFTableSink, ShuffleKeyPruner.PruneCtx) |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| visitPhysicalOlapTableSink(PhysicalOlapTableSink, ShuffleKeyPruner.PruneCtx) |   | 88% |   | 50% | 2 | 3 | 1 | 5 | 0 | 1 |
| visitPhysicalHiveTableSink(PhysicalHiveTableSink, ShuffleKeyPruner.PruneCtx) |   | 88% |   | 50% | 2 | 3 | 1 | 6 | 0 | 1 |
| visitPhysicalNestedLoopJoin(PhysicalNestedLoopJoin, ShuffleKeyPruner.PruneCtx) |   | 92% |   | 83% | 1 | 4 | 1 | 7 | 0 | 1 |
| visitPhysicalHashJoin(PhysicalHashJoin, ShuffleKeyPruner.PruneCtx) |  | 100% |  | 100% | 0 | 2 | 0 | 7 | 0 | 1 |
| visitPhysicalHashAggregate(PhysicalHashAggregate, ShuffleKeyPruner.PruneCtx) |  | 100% |  | 100% | 0 | 4 | 0 | 6 | 0 | 1 |
| visitPhysicalResultSink(PhysicalResultSink, ShuffleKeyPruner.PruneCtx) |  | 100% |   | 66% | 2 | 4 | 0 | 6 | 0 | 1 |
| visitPhysicalLimit(PhysicalLimit, ShuffleKeyPruner.PruneCtx) |  | 100% |  | 100% | 0 | 2 | 0 | 2 | 0 | 1 |
| visitAbstractPhysicalSort(AbstractPhysicalSort, ShuffleKeyPruner.PruneCtx) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| visitPhysicalRecursiveUnion(PhysicalRecursiveUnion, ShuffleKeyPruner.PruneCtx) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| visitPhysicalCTEAnchor(PhysicalCTEAnchor, ShuffleKeyPruner.PruneCtx) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| visitPhysicalDistribute(PhysicalDistribute, ShuffleKeyPruner.PruneCtx) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| visitPhysicalSetOperation(PhysicalSetOperation, ShuffleKeyPruner.PruneCtx) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| visitPhysicalCTEProducer(PhysicalCTEProducer, ShuffleKeyPruner.PruneCtx) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| visitPhysicalGenerate(PhysicalGenerate, ShuffleKeyPruner.PruneCtx) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| visitPhysicalRepeat(PhysicalRepeat, ShuffleKeyPruner.PruneCtx) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| visitPhysicalDeferMaterializeResultSink(PhysicalDeferMaterializeResultSink, ShuffleKeyPruner.PruneCtx) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| visitPhysicalWindow(PhysicalWindow, ShuffleKeyPruner.PruneCtx) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |