`Selected 13 parts by date, 13 parts by key, 26 marks by primary key .... `

This message is confusing for new users.

I suggest to replace it with

`Selected 13 parts by partition key, 13 parts by primary key, 26 marks by primary key...`
for (size_t i = 0; i < used_key_size; ++i)
            index_block->insert({index[i], primary_key.data_types[i], primary_key.column_names[i]});
        create_field_ref = [index_block](size_t row, size_t column, FieldRef & field)
        {
            field = {index_block.get(), row, column};
        };
    }
    else
    {
        create_field_ref = [&index](size_t row, size_t column, FieldRef & field)
        {
            index[column]->get(row, field);
        };
    }
    
    std::vector<FieldRef> index_left(used_key_size);
    std::vector<FieldRef> index_right(used_key_size);
    auto may_be_true_in_range = [&](MarkRange & range)
    {
        if (range.end == marks_count && !has_final_mark)
        {
            for (size_t i = 0; i < used_key_size; ++i)
                create_field_ref(range.begin, i, index_left[i]);
            return key_condition.mayBeTrueAfter(
                used_key_size, index_left.data(), primary_key.data_types);
        }
        if (has_final_mark && range.end == marks_count)
            range.end -= 1; 
        for (size_t i = 0; i < used_key_size; ++i)
        {