And waits for them. That's pointless.
{
    MergeTreeData::DataPart::ColumnToSize map;
public:
    
    
    size_t sum_total = 0;
    size_t sum_index_columns = 0;
    size_t sum_ordinary_columns = 0;
    ColumnSizeEstimator(const MergeTreeData::DataPart::ColumnToSize & map_, const Names & key_columns, const Names & ordinary_columns)
        : map(map_)
    {
        for (const auto & name : key_columns)
            if (!map.count(name)) map[name] = 0;
        for (const auto & name : ordinary_columns)
            if (!map.count(name)) map[name] = 0;
        for (const auto & name : key_columns)
            sum_index_columns += map.at(name);
        for (const auto & name : ordinary_columns)
            sum_ordinary_columns += map.at(name);
        sum_total = std::max(static_cast<decltype(sum_index_columns)>(1), sum_index_columns + sum_ordinary_columns);
    }
    Float64 columnWeight(const String & column) const
    {
        return static_cast<Float64>(map.at(column)) / sum_total;
    }
    Float64 keyColumnsWeight() const