[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