I have a table with one million rows of data. And It's schema is like:
```
create table redis_dictionary_test
(
	date String,
	id String,
	value Int64
)
engine = MergeTree()
partition by date
order by id
settings index_granularity = 8192;
```

I also inserted one million key-value pairs into Redis.
The dictionary is like:
```
create dictionary redis_dict
(
	date String,
	id String,
	value Int64
)
PRIMARY KEY date, id
SOURCE(REDIS(
	host '127.0.0.1'
	port 6379
	storage_type 'hash_map'
	db_index 0
))
LAYOUT(COMPLEX_KEY_DIRECT())
```
When I execute this query: `SELECT COUNT(DISTINCT dictGet('redis_dict', 'value', tuple(date, id))) FROM redis_dictionary_test;`, ClickHouse seems stuck. Progress was in this state: 122.88 thousand rows, 5.84 MB (1.20 million rows/s., 56.83 MB/s.)  12% about five minutes. Finally, I canceled query.

I am sure Redis is fine. Because I monitored Redis and it could accept read and write commands.

I also executed this query on 1000, 10000 and 100000 rows of data. They can return data normally.

What happened to ClickHouse? Where can I find out the reason?
primary_with_secondary.addRedisType(secondary_key);
                    
                    if (primary_with_secondary.size() == max_block_size + 1)
                    {
                        hkeys.add(primary_with_secondary);
                        primary_with_secondary.clear();
                        primary_with_secondary.addRedisType(key);
                    }
                }
                if (primary_with_secondary.size() > 1)
                    hkeys.add(std::move(primary_with_secondary));
            }
            keys = std::move(hkeys);
        }
        return Pipe(std::make_shared<RedisSource>(client, std::move(keys), storage_type, sample_block, max_block_size));
    }
    Pipe RedisDictionarySource::loadIds(const std::vector<UInt64> & ids)
    {
        if (!client->isConnected())
            client->connect(host, port);
        if (storage_type == RedisStorageType::HASH_MAP)
            throw Exception(ErrorCodes::UNSUPPORTED_METHOD, "Cannot use loadIds with 'hash_map' storage type");
        if (!dict_struct.id)
            throw Exception(ErrorCodes::UNSUPPORTED_METHOD, "'id' is required for selective loading");
        RedisArray keys;
        for (UInt64 id : ids)
            keys << DB::toString(id);
        return Pipe(std::make_shared<RedisSource>(client, std::move(keys), storage_type, sample_block, max_block_size));
    }
    Pipe RedisDictionarySource::loadKeys(const Columns & key_columns, const std::vector<size_t> & requested_rows)