clickhouse的主键和order by整理(来自网络)
ClickHouse 的主键索引采用的是稀疏索引,将每列数据按照 index granularity(默认8192行)进行划分。稀疏索引的好处是条目相对稠密索引较少,能够将其加载到内存,而且对插入时建立索引的成本相对较小。
ClickHouse 数据按列进行存储,每一列都有对应的 mrk 标记文件,bin 文件。mrk 文件与主键索引对齐,主要用于记录数据在 bin 文件中的偏移量信息。
查询时通过对主键索引进行二分查找,(比如放在where中进行查询)定位到对应的 mrk 标记文件,进而找到对应的 bin 文件的偏移量,最终扫描得到相应的数据,避免了全表扫描,从而加速查询。 值得注意的是,ClickHouse 的主键与 MySQL 等数据库不同,主键不是唯一的
order by 设定了分区内的数据按照哪些字段顺序进行有序保存。
order by 是 MergeTree 中唯一一个必填项,甚至比 primary key 还重要,因为当用户不
设置主键的情况,很多处理会依照 order by 的字段进行处理,
要求:主键必须是 order by 字段的前缀字段。
比如 order by 字段是 (id,sku_id) 那么主键必须是 id 或者(id,sku_id)