type
status
date
slug
summary
tags
category
icon
password
簡介
在 MergeTree 中會依照表上的 partition by 指定的分區鍵將 INSERT 的資料塞入到對應的分區中,不同分區的資料會分散在不同的實體目錄,在訪問數據時可以幫助 ClickHouse 盡可能少的掃描數據。
大多數的情況下不需要分區鍵,即使需要通常也不需要比月份更精細的分區鍵,過於精細的分區反而會降低效率,例如:不建議將 id 設為分區鍵,而是應該透過 order by 設為稀疏索引。
範例
建立一張包含分區設定的表:
因為表才建立還沒有塞入數據,因此看不到任何分區目錄:
向表中插入新數據時,同一批次的新數據會被儲存在單獨的分區目錄:
隨後經過約 10~15 分鐘後 (或者是使用
OPTIMIZE TABLE
) 同一分區的資料會合併到一個新的分區目錄,並且舊的分區目錄其 active 會被設為 0 不再使用:隨後經過約 10 分鐘後,active = 0 的分區目錄會被刪除:
分區目錄的命名規則

- PartitionID:分區ID,為依照分區鍵計算的結果。
- MinBlockNum、MaxBlockNum:
BlockNum 是一個以表為單位的自增值,每當新建一個分區目錄時 BlockNum 就會增長。
因此 Min、Max 的 BlockNum 就表示該分區目錄所包含的最小和最大 BlockNum。
對於一個新建的分區目錄 Min、Max BlockNum 會是相等的:
分區合併時才會發生分區目錄的 Min、Max BlockNum 不相同:
- Level:分區合併的次數,對於每一個 PartitionID 所屬的分區目錄其起始值為 0。
分區目錄的合併過程

