ClickHouse:在用作布尔值的 Uint8 上使用 LowCardinality 字段是否有意义?

ClickHouse: Does it make sense to use LowCardinality fields on Uint8 used as Boolean?

ClickHouse 中的

LowCardinality 字段是一种优化,其中的值是字典编码的,以实现更快的查找和更小的存储。根据 documentation:

The efficiency of using LowCarditality 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.

用作布尔值的 UInt8 值怎么样?基数为 2,但占用空间如此之小 (8),使用它实际上会给查询带来好处吗?

LowCardinality 主要对字符串类型有意义。

LowCardinality(UInt8) 总是比 UInt8 差。

在极少数情况下,低基数对数字类型有意义。但我什至不会测试它,因为它浪费时间。 指向 LC 字典的指针在 .bin 文件中采用 (Int8-Int32),因此在磁盘 space 和 CPU 中将数值本身存储在 .bin 文件中更便宜。

根据 https://clickhouse.com/docs/en/whats-new/changelog/#new-feature,ClickHouse 现在支持原生 Bool 类型。它本质上是一个限制为值 0 和 1 的 UInt8,但它也会以 JSON.[=15= 等格式序列化到 true/false 或从 true/false 序列化]