### 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/test/java/org/elasticsearch/compute/operator/MultivalueDedupeTests.java
}
        assertHash(b, hashes, hashedValues.size(), previousValues, i -> hashedValues.get((int) i));
    }
    private void assertBytesRefHash(Set<BytesRef> previousValues, BasicBlockTests.RandomBlock b) {
        BytesRefHash hash = new BytesRefHash(1, BigArrays.NON_RECYCLING_INSTANCE);
        previousValues.stream().forEach(hash::add);
        MultivalueDedupe.HashResult hashes = new MultivalueDedupeBytesRef(Block.Ref.floating(b.block())).hash(hash);
        assertThat(hashes.sawNull(), equalTo(b.values().stream().anyMatch(v -> v == null)));
        assertHash(b, hashes.ords(), hash.size(), previousValues, i -> hash.get(i, new BytesRef()));
    }
    private void assertIntHash(Set<Integer> previousValues, BasicBlockTests.RandomBlock b) {
        LongHash hash = new LongHash(1, BigArrays.NON_RECYCLING_INSTANCE);
        previousValues.stream().forEach(hash::add);
        MultivalueDedupe.HashResult hashes = new MultivalueDedupeInt(Block.Ref.floating(b.block())).hash(hash);
        assertThat(hashes.sawNull(), equalTo(b.values().stream().anyMatch(v -> v == null)));
        assertHash(b, hashes.ords(), hash.size(), previousValues, i -> (int) hash.get(i));
    }
    private void assertLongHash(Set<Long> previousValues, BasicBlockTests.RandomBlock b) {
        LongHash hash = new LongHash(1, BigArrays.NON_RECYCLING_INSTANCE);
        previousValues.stream().forEach(hash::add);
        MultivalueDedupe.HashResult hashes = new MultivalueDedupeLong(Block.Ref.floating(b.block())).hash(hash);
        assertThat(hashes.sawNull(), equalTo(b.values().stream().anyMatch(v -> v == null)));
        assertHash(b, hashes.ords(), hash.size(), previousValues, i -> hash.get(i));
    }
    private void assertDoubleHash(Set<Double> previousValues, BasicBlockTests.RandomBlock b) {
        LongHash hash = new LongHash(1, BigArrays.NON_RECYCLING_INSTANCE);
        previousValues.stream().forEach(d -> hash.add(Double.doubleToLongBits(d)));
        MultivalueDedupe.HashResult hashes = new MultivalueDedupeDouble(Block.Ref.floating(b.block())).hash(hash);
        assertThat(hashes.sawNull(), equalTo(b.values().stream().anyMatch(v -> v == null)));
        assertHash(b, hashes.ords(), hash.size(), previousValues, i -> Double.longBitsToDouble(hash.get(i)));