Changes the internal representation of other data types to be dictionary-encoded.
data_type— String, FixedString, Date, DateTime, and numbers excepting Decimal.
LowCardinalityis not efficient for some data types, see the allow_suspicious_low_cardinality_types setting description.
LowCardinality is a superstructure that changes a data storage method and rules of data processing. ClickHouse applies dictionary coding to
LowCardinality-columns. Operating with dictionary encoded data significantly increases performance of SELECT queries for many applications.
The efficiency of using
LowCardinality data type depends on data diversity. If a dictionary contains less than 10,000 distinct values, then ClickHouse mostly shows higher efficiency of data reading and storing. If a dictionary contains more than 100,000 distinct values, then ClickHouse can perform worse in comparison with using ordinary data types.
LowCardinality instead of Enum when working with strings.
LowCardinality provides more flexibility in use and often reveals the same or higher efficiency.
Create a table with a
CREATE TABLE lc_t ( `id` UInt16, `strings` LowCardinality(String) ) ENGINE = MergeTree() ORDER BY id
- A Magical Mystery Tour of the LowCardinality Data Type.
- Reducing Clickhouse Storage Cost with the Low Cardinality Type – Lessons from an Instana Engineer.
- String Optimization (video presentation in Russian). Slides in English.