[Clickhouse] Primary Index
MergeTree ๊ณ์ด ์์ง์์ ๊ฐ์ฅ ๊ทน์ ์ธ ํจ๊ณผ๋ฅผ ์ค ์ ์๋ ์ ๊ทผ๋ฒ์ ๊ธฐ๋ณธํค, ๊ทธ๋ฌ๋๊น ์ ๋ ฌํค๋ฅผ ์กฐ์ ํ๋ ๊ฒ์ด๋ค.
Sparse Index
Primary Index๋ ๊ธฐ๋ณธ์ ์ผ๋ก Sparse Index๋ค.
ํ๋ง๋ค ์ธ๋ฑ์ค๊ฐ ์๋๊ฒ ์๋๋ผ, granule(๋ธ๋ก)๋ง๋ค mark๋ผ๊ณ ํ๋ ์ธ๋ฑ์ค ๋จ์๋ฅผ ๊ตฌ์ฑํ๋ค.

๊ทธ๋ฆฌ๊ณ MergeTree๋ granule์ ๋ง๋ค๋ Primary Index ๋์ ์ปฌ๋ผ์ ๊ฐ์ด ๊ฐ๊ฑฐ๋ ๋น์ทํ๊ฑธ ๋ญ์ณ์ ์ ์ฅํ๋ค. ๊ทธ๋ฌ๋๊น ์ผ์นํ๋ ํ ๋ชฉ๋ก์ ๋น ๋ฅด๊ฒ ์๋ณํ๊ณ ์ค์บํ ์ ์๋ ๊ฒ์ด๋ค.
๋ค๋ง, ์นด๋๋๋ฆฌํฐ๊ฐ
์ธ๋ฑ์ค์ ๋ณ๊ฒฝ๊ณผ ์ ํ
Order Key๋ ์ ๋์ฌ๊ฐ Primary Key๊ฐ ๋์ด์ผ ํ๋ค. ๊ทธ๋ฌ๋๊น, Primary Key๊ฐ (id)๋ฉด ์ ๋ ฌํค๋ (id, key)๋ก ์์์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค. ๋ฐ๋๋ก (key, id)๋ก ๋ค์ง๋๊ฑด ์๋๋ค.
Primary Key๋ ์์ฑ ํ์ ๋ณ๊ฒฝํ ์ ์๋ค. ๋ค์ ์ฒ์๋ถํฐ ๋ธ๋ก์ ์ฌ๊ตฌ์ฑํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
Order By๋ ํ ์ด๋ธ ์์ฑ ํ์๋ ๋ณ๊ฒฝํ ์ ์์ผ๋, ์ ํ์ ์ด๋ค.
ALTER TABLE ํ
์ด๋ธ๋ช
MODIFY ORDER BY (์ปฌ๋ผ1, ์ปฌ๋ผ2)
ํ ์ด๋ธ ์์ฑ ํ์ ์ถ๊ฐ๋ ์ปฌ๋ผ์ ํํด์๋ง, append only๋ก ๋ถ์ผ ์ ์๋ค.

๊ทธ๋ฌ๋๊น ์ธ๋ฑ์ค ๊ตฌ์ฑ์ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด ํ
์ด๋ธ์ ์์ฑํด์ ๋ค์ ๋ถ๋๊ฒ ์ผ๋ฐ์ ์ด๋ค.
๋คํํ๋ ์ปฌ๋ผ ๋ชฉ๋ก์ด ๊ฐ๋๋ฉด ๋์ถฉ SELECT->INSERT ์ฟผ๋ฆฌ๋ก ๋ถ๋๊ฑด ์ฝ๋ค.
INSERT INTO ์ํ
์ด๋ธ SELECT * FROM ๊ตฌํ
์ด๋ธ์ฐธ์กฐ
https://clickhouse.com/docs/guides/best-practices/sparse-primary-indexes
https://clickhouse.com/docs/guides/best-practices/sparse-primary-indexes#an-index-design-for-massive-data-scales