### Description

![image](https://github.com/elastic/elasticsearch/assets/76245/d0443170-0419-4759-b505-7620ff3d6594)

The execution time of grouping stats by multiple keywords has increased: 1.2 to 1.6 seconds (with doc_partitioning), 4.3 to 6.7 seconds (with shard_partitioning). The equivalent query with the _search API takes 1.8 seconds.

`from nyc_taxis | ... | stats c = count(dropoff_datetime) by trip_type, payment_type, vendor_id`

This regression occurred since July 2, 2023, and I suspect it may be due to the PR: [Support multivalued fields on arbitrary grouping](https://github.com/elastic/elasticsearch-internal/pull/1340).

/cc @nik9000
x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/operator/BatchEncoder.java
readNextBatch();
    }
    @Override
    public long ramBytesUsed() {
        return SHALLOW_SIZE + RamUsageEstimator.sizeOf(counts) + RamUsageEstimator.sizeOf(valueOffsets);
    }
    /**
     * Encodes the next batch of values. See {@link #encodeNextBatch()}.
     */
    protected abstract void readNextBatch();
    /**
     * Implementations of {@link #readNextBatch} should call this before any
     * values at the current position.
     */
    protected final void startPosition() {
        counts = ArrayUtil.grow(counts, positionCount + 1);
        counts[positionCount] = 0;
    }
    /**
     * Implementations of {@link #readNextBatch} should call this before adding
     * each value to the current position to mark its start.
     */
    protected final void addingValue() {
        counts[positionCount]++;
        valueOffsets = ArrayUtil.grow(valueOffsets, currentValue + 1);
        valueOffsets[currentValue++] = bytes.length();
    }
    /**
     * Implementations of {@link #readNextBatch} should call this to end
     * the current position.