**Describe the situation**

When using parameters (`param`) in the CLI or with the HTTP interface, the EmbeddedRocksDB engine will scan through all the data causing significant slowdown, instead of doing a proper RocksDB key lookup.

**How to reproduce**

setup.sql:
```sql
CREATE TABLE test1 (key String, value String) ENGINE=EmbeddedRocksDB PRIMARY KEY key;

-- do this a few times to exacerbate the issue
INSERT INTO test1 (*) SELECT n.number, randomString(10000) FROM numbers(10000) n;
INSERT INTO test1 (*) SELECT n.number, randomString(10000) FROM numbers(10000) n;
INSERT INTO test1 (*) SELECT n.number, randomString(10000) FROM numbers(10000) n;
```

```
❯ clickhouse client "--param_key=5000" --query "SELECT value FROM test1 WHERE key = {key:String} FORMAT JSON" | jq ".statistics"
{
  "elapsed": 0.20763,
  "rows_read": 10000,
  "bytes_read": 100218890
}

❯ clickhouse client --query "SELECT value FROM test1 WHERE key = '5000' FORMAT JSON" | jq ".statistics"
{
  "elapsed": 0.000519,
  "rows_read": 1,
  "bytes_read": 10022
}
```

**Version**
22.6.1.231


FieldVector::const_iterator & it,
    FieldVector::const_iterator end,
    DataTypePtr key_column_type,
    size_t max_block_size)
{
    size_t num_keys = end - it;
    std::vector<std::string> result;
    result.reserve(num_keys);
    size_t rows_processed = 0;
    while (it < end && (max_block_size == 0 || rows_processed < max_block_size))
    {
        std::string & serialized_key = result.emplace_back();
        WriteBufferFromString wb(serialized_key);
        key_column_type->getDefaultSerialization()->serializeBinary(*it, wb);
        wb.finalize();
        ++it;
        ++rows_processed;
    }
    return result;
}
static std::vector<std::string> serializeKeysToRawString(const ColumnWithTypeAndName & keys)