When user requested single column from the table we still calculating all of them. Calculation of some columns is quite expensive (need to do stat calls / read files etc). 
{
            Array expression_array;
            Array min_array;
            Array max_array;
            expression_array.reserve(ttl_info_map.size());
            min_array.reserve(ttl_info_map.size());
            max_array.reserve(ttl_info_map.size());
            for (const auto & [expression, ttl_info] : ttl_info_map)
            {
                expression_array.emplace_back(expression);
                min_array.push_back(static_cast<UInt32>(ttl_info.min));
                max_array.push_back(static_cast<UInt32>(ttl_info.max));
            }
            columns_[i++]->insert(expression_array);
            columns_[i++]->insert(min_array);
            columns_[i++]->insert(max_array);
        };
        add_ttl_info_map(part->ttl_infos.moves_ttl);
        columns_[i++]->insert(queryToString(part->default_codec->getCodecDesc()));
        add_ttl_info_map(part->ttl_infos.recompression_ttl);
        add_ttl_info_map(part->ttl_infos.group_by_ttl);
        add_ttl_info_map(part->ttl_infos.rows_where_ttl);
        
        
        if (has_state_column)
            columns_[i++]->insert(IMergeTreeDataPart::stateToString(part_state));
    }
}
}