[PostgreSQL] Scan
Scan์ด๋ ๋ง ๊ทธ๋๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์บํ๋ ๊ฒ์ ๋งํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ค์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ ์ฅํด๋จ๋ค๊ฐ ์ฝ์ด๋ค์ด๋ ๋ฐฉ์์ ์ทจํ๋๋ฐ. DB ์ฌ์ฉ์ ์์ด์ ๊ฐ์ฅ ํฐ ๋ถํ๊ฐ ๊ฑธ๋ฆฌ๋ ๋ถ๋ถ ์ค ํ๋๊ฐ ์ด๊ฒ์ด๋ค.
๋์คํฌ๋ ๊ฒ๋ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ค.
์ค์บ์๋ ์ฌ๋ฌ๊ฐ์ง ์ข ๋ฅ๊ฐ ์๊ณ DB ์์คํ ๋ง๋ค ์กฐ๊ธ์ฉ ๋ค๋ฅธ๋ฐ, ์ผ๋จ ์ฌ๊ธฐ์๋ Postgres์ ์ค์บ ์ข ๋ฅ๋ง ๊ฐ๋ตํ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ๋ค.
Postgres์๋ ํฌ๊ฒ ์์ฐจ ์ค์บ, ์ธ๋ฑ์ค ์ค์บ, ์ธ๋ฑ์ค Only ์ค์บ, ๋นํธ๋งต ์ค์บ, TID ์ค์บ ๋ฑ์ด ์๋ค.
์์ฐจ ์ค์บ(Sequencial Scan)
์์ฐจ ์ค์บ์ ๋ง ๊ทธ๋๋ก ์์ฐจ์ ์ผ๋ก ์ฝ์ด์ค๋ ์ค์บ์ด๋ค.
๊ฐ์ฅ ๋จ์ํ๊ณ , ๊ธฐ๋ณธ์ ์ด์ง๋ง ์ฑ๋ฅ์ ํญ๋ฐ์ ๋ถ๋ฌ์ผ์ผํฌ ์ ์๋ค.
๋ง์ฝ ํ
์ด๋ธ์ 10000๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๊ณ , ๊ทธ ์ค์ 1๊ฐ๋ง ๊ฐ์ ธ์ค๋ ค๊ณ ํด๋ ์์ฐจ ์ค์บ์ด ๋ฐ์ํ๋ค๋ฉด 10000๊ฐ๋ฅผ ์ ๋ถ ์ฝ์ด์ผ ํ๋ ๋ง๋ ์๋๋ ์ผ์ด ๋ฒ์ด์ง๊ธฐ ๋๋ฌธ์๋ค.
๊ทธ๋์ ์ ๊ธฐ์ text ์ค ํ๋๋ง ๊ฐ์ ธ์ค๋ ค ํด๋
์คํ์๊ฐ์ด ์ ํ ์ค์ด๋ค์ง ์์์ ๋ณผ ์ ์๋ค.
๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ฉด ๋ง์์ง์๋ก ์ด์ ๋ํ ๋ฌธ์ ๋ ์ปค์ง๋ค.
์๋๋ ์ฝ 2์ฒ๋ง๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์์ ๋์ ์คํ๊ณํ์ด๋ค.
๋น์ฉ์ด ๊ธ๊ฒฉํ๊ฒ ์์นํ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ฐ๋ผ์ ์์ฐจ์ค์บ์ ์์ฃผ ์ ์ ํน์ ๊ฐ์ ๊ฐ์ ธ์ฌ ๋๋ ์ ํฉํ์ง ์๋ค.
์ธ๋ฑ์ค ์ค์บ(Index Scan)
์ธ๋ฑ์ค๋ ๋ง ๊ทธ๋๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์์ธ(Index)์ ๋ค๋ ๊ฒ์ด๋ค.
๊ธฐ๋ณธ ํ
์ด๋ธ์ด ์์ฐจ์ ์ผ๋ก ์ ์ฅ๋๋ ๊ฒ์ ๋ฐํด์, ์ธ๋ฑ์ค๋ Bํธ๋ฆฌ ํํ๋ก ์์ฑ์ด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ณธ์ ์ง์ ์ฐธ์กฐํด์ ์ ๊ทผํ ์๊ฐ ์๋ค.
๋๋ฌธ์ ํจ์ฌ ๋น ๋ฅธ ์๋๋ก ํ์์ ์ํํ ์ ์๋ ๊ฒ์ด๋ค.
์ธ๋ฑ์ค์ ์์ฑ์ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์๋ค.
CREATE INDEX ์ธ๋ฑ์ค๋ช
ON ํ
์ด๋ธ๋ช
USING btree (์ปฌ๋ผ๋ค)

๋ค์ ์ด์ ์ ์ฟผ๋ฆฌ๋ฅผ ์ธก์ ํด๋ณด๋ฉด, ๋ค๋ฅด๊ฒ ๋์ฌ ๊ฒ์ด๋ค.
๋น์ฉ์ด 28๋ง์ ๋ฌํ๋ ๊ฒ์ด ๋ฌด๋ ค 11๋ก ์ค์ด๋ค์๋ค.
๋ฌด์ํ๊ฒ ์ฝ์ด์จ๋ค์์ ๊ฑธ๋ฌ๋ธ ๊ฒ์ด ์๋๋ผ, ์ธ๋ฑ์ค ํธ๋ฆฌ๋ก ๋น ๋ฅด๊ฒ ์ ๊ทผํ ํ์ ๊ฐ์ ธ์์ ๊ทธ๋ ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ปฌ๋ผ๋ง๋ค ์ธ๋ฑ์ค๋ฅผ ๋ฌ์์ฃผ๋๊ฒ ๋น ๋ฅด๊ณ ์ข์ ๊ฑธ๊น?
๊ทธ๋ ์ง๋ ์๋ค.
์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด ๋ฐ์ดํฐ๋ง๋ค ๋์๋๋ ์ธ๋ฑ์ค ํธ๋ฆฌ๊ฐ์ด ์๊ฒจ๋๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ง ์๊ฒ ์ฐจ์งํ๋ค. ๋ฟ๋ง ์๋๋ผ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ , ์์ , ์ญ์ ํ ๋๋ง๋ค ์ธ๋ฑ์ค๊ฐ๋ ๊ทธ์ ๋ง์ถฐ์ฃผ๋ ์์ ์ ์ํํ๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ธ ๋ถํ๊ฐ ๋์ด๋ ์๋ ์๋ค.
๊ทธ๋ ๋ค๊ณ ์ธ๋ฑ์ค ์ค์บ์ด ์์ฐจ ์ค์บ๋ณด๋ค ํญ์ ๋น ๋ฅธ ๊ฒ๋ ์๋๋ค.
์ธ๋ฑ์ค ์ค์บ์ ๋ด๋ถ์ ์ผ๋ก ๋๋คIO๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด ์์
์์ฒด๋ ์ฌ์ค ์์ฐจIO๋ณด๋ค ๋๋ต 4๋ฐฐ๋ ๋๋ฆฌ๋ค!
'๋น ๋ฅด๊ฒ ์ ๋ณํด์' ์ฝ์ด์ฌ ์ ์๋ค๋ ๊ฒ์ด์ง, ์ฝ์ด์ค๋ ๊ฒ ์์ฒด๊ฐ ๋น ๋ฅธ ๊ฒ์ ์๋๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ๋ญ๊ฐ ์๋ฉ ๊ฐ์ ธ์ฌ๋๋ ์ธ๋ฑ์ค๊ฐ ๋ ๋๋ฆด ์ ์๋ค.
๊ฒ๋ค๊ฐ ํ ์ด๋ธ ๊ท๋ชจ๊ฐ ์ด๋ ์๊ณ์ ์ ๋์ด์ ์ด๋ํ ๊ท๋ชจ๊ฐ ๋๋ฉด ์ธ๋ฑ์ค๊ฐ ์คํ๋ ค ๋๋ ค์ง๊ณ ์์ฐจ ์ค์บ์ด ๋นจ๋ผ์ง ์๋ ์๋ค. ์์ฐจ์ค์บ์ ๊ท๋ชจ๊ฐ ํด ๊ฒฝ์ฐ ๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ํตํด ํจ์ฌ ๋น ๋ฅธ ์ค์บ์ ๊ธฐ๋ํ ์ ์๋๋ฐ, ์ธ๋ฑ์ค์ ๋๋ค ์ ๊ทผ์ ํ ์ด๋ธ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ์ปค์ง์๋ก ์บ์ฑ ์ฑ๊ณต ํ๋ฅ ์ด ๋ฎ์์ง๋ ๋ฑ์ ๊ฒฐ์ ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ ์ํ ํ ์ด๋ธ์ ๊ฒฝ์ฐ ์์ฐจ์ ์ธ๋ฑ์ค์ ์์ต์ ์ด 15%๋ผ๋ฉด, ๋ํ์ ๊ฒฝ์ฐ์๋ 5%, ์ด๋ํ์ ๊ฒฝ์ฐ์๋ 1%๊ฐ ๋ ์๋ ์๋ ๊ฒ์ด๋ค. ์ด๋ฐ ๊ทน๋จ์ ์ธ ๊ฒฝ์ฐ์๋ ์ ์ฒด ๋ฐ์ดํฐ์ 1%๋ฅผ ์ธ๋ฑ์ค ์ค์บํ๋ ๊ฒ๋ณด๋ค ์์ฐจ์ค์บ์ ๋๋ฆฌ๋ ๊ฒ์ด ๋น ๋ฅผ ์ ์๋ค.
๊ทธ๋์ ์ฌ๋งํ๋ฉด ํ์ํ ๋, ํ์ํ ๋งํผ๋ง ์ถ๊ฐํด์ ์ฐ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
์ธ๋ฑ์ค Only ์ค์บ
์ด๊ฑด ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ๋ฑ์ค ์ค์บ๊ณผ ์ ์ฌํ๋ค.
์ฐจ์ด์ ์, ์ธ๋ฑ์ค๋ก ํ์ํด์ ์ธ๋ฑ์ค ์ปฌ๋ผ๊ฐ์ ๊ฐ์ ธ์ฌ ๋๋ง ๋ฐ์ํ๋ค๋ ๊ฒ์ด๋ค.
์๊น๋ select *๋ก ์ธ๋ฑ์ค์ปฌ๋ผ์ด ์๋๊ฒ๊น์ง ๋ค ๊ฐ์ ธ์์ง๋ง, ์ด๋ฒ์๋ ์ธ๋ฑ์ค์ธ text๋ง ๊ฐ์ ธ์๋ค.

์ธ๋ฑ์ค ์ค์บ์ ๋นํด์ ํน๋ณํ ์ฑ๋ฅ ์ด์ ์ด ์๋์ง๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค.
๋นํธ๋งต(Bitmap) ์ค์บ
์์์ ์ธ๊ธํ๋ฏ์ด, ์ธ๋ฑ์ค ์ค์บ์ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ํจ๊ณผ์ ์ด๊ณ , ์์ฐจ ์ค์บ์ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ํจ๊ณผ์ ์ด๋ค.
๊ทผ๋ฐ ์ธ๋ฑ์ค๋ฅผ ๋๋ฆฌ๊ธฐ์ ์ ๋งคํ๊ฒ ๋ง๊ณ , ์์ฐจ๋ฅผ ๋๋ฆฌ๊ธฐ์ ์ ๋งคํ๊ฒ ์ ์ ๋๊ฐ ์์ ์ ์๋ค.
๊ทธ๋ด ๋ ์ฌ์ฉ๋๋ ๊ฒ์ด ๋ฐ๋ก ๋นํธ๋งต ์ค์บ์ด๋ค.
๋นํธ๋งต ์ค์บ์ ์ธ๋ฑ์ค ์ค์บ์์ ๋ฐ์ํ ์ ์๋ ๊ณผ๋ํ ๋๋คIO๋ฅผ ๋ฐฉ์งํ๋ฉด์, ์ธ๋ฑ์ค์ ์ฑ๋ฅ๋ ์ด๋์ ๋ ๊ฐ์ ธ์ฌ ์ ์๋ค.
๊ฒ๋ค๊ฐ ๋ฌด๊ฒ๊ณ ๊ฒฝ์ง๋ BTree๊ฐ ์๋ ๋นํธ๋งต์ ์ฌ๋ ค๋๊ณ ๋๋ฆฌ๋ ํํ๋ผ, ์ด๋ฐ์ ๋ฐ ํจ์จ์ ์ด ๋ง์ ํธ์ด๋ค.
๋นํธ๋งต ์ค์บ์ ๋นํธ๋งต ์ธ๋ฑ์ค ์ค์บ๊ณผ ๋นํธ๋งต ํ ์ค์บ์ 2 ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค.
1.๋นํธ๋งต ์ธ๋ฑ์ค ์ค์บ์ด๋ ๊ฒ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ ธ์์ ๋นํธ๋งต์ด๋ ๊ฑธ ๋ง๋ค๊ณ ,
2.๋นํธ๋งต ํ ์ค์บ. ๊ทธ ๋นํธ๋งต์ ์ฝ๊ณ ๋ฉ๋ชจ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด๋ค.

TID ์ค์บ
postgresql์ ๋ฐ์ดํฐ์๋ TID๋ผ๋ ๊ณ ์ ํ ์๋ณ๊ฐ์ด ๋ด์ฅ๋์ด์๋ค.
์ด๊ฑด ํ์์ ์จ๊ฒจ์ ธ์์ง๋ง, ์ผ๋ฐ ์ปฌ๋ผ์ฒ๋ผ๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.

๊ทธ๋ฆฌ๊ณ ์ ๊ฑธ ํตํด ๊ฒ์์ ์๋ํ๋ฉด TID ์ค์บ์ ์ํํ๊ฒ ๋๋ ๊ฒ์ด๋ค.

์๋ง ๋น ๋ฅด๊ธฐ๋ ์ ์ผ ๋น ๋ฅด์ง ์๋ ์ถ๋ค?
์ฐธ์กฐ
"ใ์๋ก ์ด ๋์ฉ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฃจ์
ใ, ์ดํ์"
https://severalnines.com/database-blog/overview-various-scan-methods-postgresql
http://www.gurubee.net/lecture/2394
http://wiki.gurubee.net/pages/viewpage.action?pageId=1507452