column_name 'value_int' 'value_string' 'value_decimal' 'value_string_nullable' elements_count 5000000 7500000 layout_suffix HASHED SPARSE_HASHED CREATE TABLE simple_key_dictionary_source_table ( id UInt64, value_int UInt64, value_string String, value_decimal Decimal64(8), value_string_nullable Nullable(String) ) ENGINE = Memory CREATE TABLE complex_key_dictionary_source_table ( id UInt64, id_key String, value_int UInt64, value_string String, value_decimal Decimal64(8), value_string_nullable Nullable(String) ) ENGINE = Memory CREATE DICTIONARY IF NOT EXISTS simple_key_{layout_suffix}_dictionary ( id UInt64, value_int UInt64, value_string String, value_decimal Decimal64(8), value_string_nullable Nullable(String) ) PRIMARY KEY id SOURCE(CLICKHOUSE(TABLE 'simple_key_dictionary_source_table')) LAYOUT({layout_suffix}()) LIFETIME(0) CREATE DICTIONARY IF NOT EXISTS complex_key_{layout_suffix}_dictionary ( id UInt64, id_key String, value_int UInt64, value_string String, value_decimal Decimal64(8), value_string_nullable Nullable(String) ) PRIMARY KEY id, id_key SOURCE(CLICKHOUSE(TABLE 'complex_key_dictionary_source_table')) LAYOUT(COMPLEX_KEY_{layout_suffix}()) LIFETIME(0) INSERT INTO simple_key_dictionary_source_table SELECT number, number, toString(number), toDecimal64(number, 8), toString(number) FROM system.numbers LIMIT 5000000 INSERT INTO complex_key_dictionary_source_table SELECT number, toString(number), number, toString(number), toDecimal64(number, 8), toString(number) FROM system.numbers LIMIT 5000000 SYSTEM RELOAD DICTIONARY simple_key_{layout_suffix}_dictionary SYSTEM RELOAD DICTIONARY complex_key_{layout_suffix}_dictionary SYSTEM RELOAD DICTIONARY simple_key_{layout_suffix}_dictionary SYSTEM RELOAD DICTIONARY complex_key_{layout_suffix}_dictionary WITH rand64() % toUInt64({elements_count}) as key SELECT dictGet('default.simple_key_{layout_suffix}_dictionary', {column_name}, key) FROM system.numbers LIMIT {elements_count} FORMAT Null WITH rand64() % toUInt64({elements_count}) as key SELECT dictHas('default.simple_key_{layout_suffix}_dictionary', key) FROM system.numbers LIMIT {elements_count} FORMAT Null SELECT * FROM simple_key_{layout_suffix}_dictionary FORMAT Null WITH (rand64() % toUInt64({elements_count}), toString(rand64() % toUInt64({elements_count}))) as key SELECT dictGet('default.complex_key_{layout_suffix}_dictionary', {column_name}, key) FROM system.numbers LIMIT {elements_count} FORMAT Null WITH (rand64() % toUInt64({elements_count}), toString(rand64() % toUInt64({elements_count}))) as key SELECT dictHas('default.complex_key_{layout_suffix}_dictionary', key) FROM system.numbers LIMIT {elements_count} FORMAT Null SELECT * FROM complex_key_{layout_suffix}_dictionary FORMAT Null DROP TABLE IF EXISTS simple_key_dictionary_source_table DROP TABLE IF EXISTS complex_key_dictionary_source_table DROP DICTIONARY IF EXISTS simple_key_{layout_suffix}_dictionary DROP DICTIONARY IF EXISTS complex_key_{layout_suffix}_dictionary