๐งท ์ธ๋ฑ์ค ์ค์บ ๋ฐฉ์
๐๏ธ Index Range Scan
์ธ๋ฑ์ค ๋ฃจํธ ๋ธ๋ก์์ ๋ฆฌํ ๋ธ๋ก๊น์ง ์์ง์ ์ผ๋ก ํ์ํ ํ, ๋ฆฌํ ๋ธ๋ก์์ ํ์ํ ๋ฒ์๋ง ์ค์บํ๋ ๋ฐฉ์
B * Tree ์ธ๋ฑ์ค์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ด๊ณ ์ ์์ ์ธ ํํ์ ์ก์ธ์ค ๋ฐฉ์์ด๋ค. ์ธ๋ฑ์ค๋ฅผ ์์ง์ ์ผ๋ก ํ์ํ ํ ๋ฆฌํ ๋ธ๋ก์์ ํ์ํ ๋ฒ์๋ง ์ค์บํ๋๋ฐ, ์ด๊ฒ์ ๋ฒ์ ์ค์บ์ ์๋ฏธํ๋ค.
Index Range Scan์ด ๋์ํ๋ ค๋ฉด ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํ๋ ์ ๋ ์ปฌ๋ผ์ด WHERE ์กฐ๊ฑด์ ์ ํฌํจ๋์ด์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ ์ํ์์ ํํธ๋ฅผ ์ฌ์ฉํด ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ ๋ก ์ ์ฉํ๋ฉด Index Full Scan ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋ ์ ์๋ค.
๋ฐ๋๋ก, ์ ๋ ์ปฌ๋ผ์ ๊ฐ๊ณตํ์ง ์์ผ๋ฉด ๋ฌด์กฐ๊ฑด Index Range Scan์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํด์ ํญ์ ์ฑ๋ฅ์ด ์ข์ ๊ฒ์ ์๋๋ค.
๊ฒฐ๊ตญ ์ธ๋ฑ์ค ์ค์บ ๋ฒ์๋ฅผ ์ค์ด๊ณ ํ
์ด๋ธ ์ก์ธ์ค๋ฅผ ์ต์ํํ๋ ๊ฒ์ด ํต์ฌ์ด๋ฉฐ, ์ด๋ ์ธ๋ฑ์ค ์ค๊ณ์ SQL ํ๋์ ์ค์ํ ์์น ์ค ํ๋๋ค.
๐๏ธ Index Full Scan
์ธ๋ฑ์ค ๋ฆฌํ ๋ธ๋ก์ ์ฒ์๋ถํฐ ๋๊น์ง ์ํ์ ์ผ๋ก ํ์ํ๋ ๋ฐฉ์์ด๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ์ต์ ์ ์ธ๋ฑ์ค๊ฐ ์์ ๋ ์ฐจ์ ์ฑ ์ผ๋ก ์ ํ
์ธ๋ฑ์ค ๋ฃจํธ ๋ธ๋ก๊ณผ ๋ธ๋์น ๋ธ๋ก์ ํตํ ์์ง์ ํ์ ์์ด ๋ฆฌํ ๋ธ๋ก ์ ์ฒด๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ์ํ์ ์ผ๋ก ์ค์บํ๋ค. ๊ทธ๋ฌ๋, ์ ๊ทธ๋ฆผ์ฒ๋ผ ์์ ํ ์์ง์ ํ์ ์์ด ์งํ๋๋ค๊ณ ์ดํดํ๋ฉด ์ ๋๋ค.
์ค์ ๋ก๋ ๋ฃจํธ ๋ธ๋ก๊ณผ ๋ธ๋์น ๋ธ๋ก์ ๊ฑฐ์น์ง ์๊ณ ๋ ๊ฐ์ฅ ์ผ์ชฝ์ ์์นํ ์ฒซ ๋ฒ์งธ ๋ฆฌํ ๋ธ๋ก์ ์ฐพ์๊ฐ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ ์์ง์ ํ์์ ๋ฐ์ํ๋ค. ๋ฃจํธ ๋ธ๋ก๊ณผ ๋ธ๋์น ๋ธ๋ก์ ํตํด ๊ฐ์ฅ ์ผ์ชฝ์ ์์นํ ์ฒซ ๋ฒ์งธ ๋ฆฌํ ๋ธ๋ก์ ์ฐพ๋ ๊ณผ์ ์ด ์ ํ๋ ํ์ ์ํ์ ํ์์ด ์งํ๋๋ค.
โ๏ธ Index Full Scan์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ
์๋ ์ฟผ๋ฆฌ์์๋ Index Full Scan์ด ๋ฐ์ํ๋ค. ์ด๋ ์ธ๋ฑ์ค ์ ๋ ์ปฌ๋ผ(STATUS
)์ด WHERE ์ ์ ํฌํจ๋์ง ์์ Index Range Scan์ด ๋ถ๊ฐ๋ฅํ์ง๋ง, ํ์์ ์ธ๋ฑ์ค ์ปฌ๋ผ(CUSTOMER_ID
)์ด ์กฐ๊ฑด์ ์ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฆ, Index Range Scan์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ์๋ ์ตํฐ๋ง์ด์ ๊ฐ Table Full Scan๋ณด๋ค Index Full Scan์ ์ ํํ ์ ์๋ค.
(1) Index Full Scan์ ํจ์ฉ์ฑ
์ธ๋ฑ์ค ์ ๋ ์ปฌ๋ผ์ด WHERE ์ ์ ์์ผ๋ฉด ์ตํฐ๋ง์ด์ ๋ ๋จผ์ Table Full Scan์ ๊ณ ๋ คํ์ง๋ง, ๋์ฉ๋ ํ ์ด๋ธ์ ๊ฒฝ์ฐ ํ ์ด๋ธ ์ ์ฒด๋ฅผ ์ฝ๋ ๋ถ๋ด์ด ํฌ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค ํ์ฉ์ด ๋ค์ ๊ฒํ ๋ ์ ์๋ค.
์ด๋ ์ธ๋ฑ์ค๊ฐ ์ฐจ์งํ๋ ๋ฉด์ ์ด ํ
์ด๋ธ๋ณด๋ค ํจ์ฌ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ์ดํฐ ์ ์ฅ ๊ณต๊ฐ์ ์ปฌ๋ผ ๊ธธ์ด × ๋ ์ฝ๋ ์
์ ์ํด ๊ฒฐ์ ๋๋ฏ๋ก, ํ
์ด๋ธ ์ ์ฒด๋ฅผ ์ค์บํ๋ ๊ฒ๋ณด๋ค ์์ ํฌ๊ธฐ์ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ๋ ๊ฒ์ด I/O ํจ์จ ์ธก๋ฉด์์ ์ ๋ฆฌํ ์ ์๋ค.
๋ฐ๋ผ์, ์ธ๋ฑ์ค ์ค์บ ๋จ๊ณ์์ ๋๋ถ๋ถ์ ๋ ์ฝ๋๋ฅผ ํํฐ๋งํ๊ณ ์ผ๋ถ๋ง ํ
์ด๋ธ ์ก์ธ์คํ ์ ์๋ค๋ฉด
์ตํฐ๋ง์ด์ ๋ Table Full Scan ๋์ Index Full Scan์ ์ ํํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
(2) Index Full Scan์ ํ์ฉํ ์ ๋ ฌ ์ฐ์ฐ ์๋ต
โ ์ ๋ ฌ(ORDER BY) ์ฐ์ฐ ์ต์ ํ
Index Full Scan์ Index Range Scan๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ๋ ฌ๋ ์ธ๋ฑ์ค๋ฅผ ์ค์บํ๊ธฐ ๋๋ฌธ์ ORDER BY
๋ฅผ ํฌํจํ ์ฟผ๋ฆฌ์์ ๋ณ๋์ ์ ๋ ฌ ์ฐ์ฐ(SORT)์ ์๋ตํ ์ ์๋ค. ๋ฐ๋ผ์ ์ ๋ ฌ์ ์ต์ ํํ๋ ๋ชฉ์ ์ผ๋ก๋ Index Full Scan์ด ์ฌ์ฉ๋ ์ ์๋ค.
โก FIRST_ROWS ํํธ
Index Full Scan์ ํน์ ์ํฉ์์ Table Full Scan๋ณด๋ค ์ฑ๋ฅ์ด ๋ ๋ถ๋ฆฌํ ์ ์๋ค. ํนํ, ์ธ๋ฑ์ค ์ค์บ ๋จ๊ณ์์ ๋๋ถ๋ถ์ ๋ ์ฝ๋๋ฅผ ํํฐ๋งํ ์ ์๊ณ , ๊ฑฐ์ ๋ชจ๋ ๋ ์ฝ๋์ ๋ํด ํ ์ด๋ธ ์ก์ธ์ค๋ฅผ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ Index Full Scan๋ณด๋ค Table Full Scan์ด ๋ ํจ์จ์ ์ผ ์ ์๋ค. (Index Range Scan๋ ๋ง์ฐฌ๊ฐ์ง)
์ด๋ฌํ ๊ฒฝ์ฐ์๋ ์ตํฐ๋ง์ด์ ๋ FIRST_ROWS ํํธ์ ์ํฅ์ ๋ฐ์ ์ธ๋ฑ์ค ์ค์บ ๋ฐฉ์์ ์ ํํ ์ ์๋ค. ์ ๋ ฌ ์ฐ์ฐ์ ์๋ตํ์ฌ ์ ์ฒด ์งํฉ ์ค ์ฒ์ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ถ๋ ฅํ๋ ค๋ ๋ชฉ์ ๋๋ฌธ์ด๋ค. ์ด ๋ฐฉ์์ ๋ถ๋ถ๋ฒ์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ์ํฉ์์ ๊ทน์ ์ธ ์ฑ๋ฅ ๊ฐ์ ํจ๊ณผ๋ฅผ ๊ฐ์ ธ๋ค์ค๋ค.
์ฃผ์ํ ์ ์ ์ฌ์ฉ์๊ฐ ์ฒ์ ์๋ํ ๋ถ๋ถ๋ฒ์ ์ฒ๋ฆฌ ํ์ฉ๊ณผ ๋ฌ๋ฆฌ fetch๋ฅผ ๋ฉ์ถ์ง ์๊ณ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ผ ํ๋ ๊ฒฝ์ฐ, Table Full Scan๋ณด๋ค ํจ์ฌ ๋ ๋ง์ I/O๋ฅผ ๋ฐ์์์ผ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
์ด ๊ฒฝ์ฐ, ์ฑ๋ฅ ์ ํ์ ์์ธ์ ์ตํฐ๋ง์ด์ ๊ฐ ์๋๋ผ, FIRST_ROWS ํํธ๋ฅผ ์ฌ์ฉํ ์ฌ์ฉ์์๊ฒ ์๋ค.
๐๏ธ Index Unique Scan
์์ง์ ํ์๋ง์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ์ค์บ ๋ฐฉ์
Index Unique Scan์ Unique ์ธ๋ฑ์ค๋ฅผ '=' ์กฐ๊ฑด์ผ๋ก ํ์ํ๋ ๊ฒฝ์ฐ์๋ง ์๋ํ๋ ์ค์บ ๋ฐฉ์์ด๋ค.
Unique ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ๋ ์ปฌ๋ผ์ ์ค๋ณต๊ฐ์ด ์
๋ ฅ๋์ง ์๋๋ก DBMS๊ฐ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ๊ด๋ฆฌํ๋ฏ๋ก, ์ธ๋ฑ์ค ํค ์ปฌ๋ผ์ ๋ชจ๋ '='์กฐ๊ฑด์ผ๋ก ๊ฒ์ํ๋ฉด ๋จ ํ๋์ ๋ฐ์ดํฐ๋ง ์ฐพ์ผ๋ฉด ๋๋ฉฐ, ์ดํ ์ถ๊ฐ์ ์ธ ํ์์ด ํ์ ์๋ค.
์ฆ, Index Unique Scan์ '์์ง์ ํ์'๋ง์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์๋ด๋ ๋ฐฉ์์ด๋ค.
๐๏ธ Index Skip Scan
(1) Index Skip Scan ์ด๋
์ผ๋ฐ์ ์ผ๋ก ์ธ๋ฑ์ค์ ์ ๋ ์ปฌ๋ผ์ด WHERE ์ ์ ํฌํจ๋์ง ์์ผ๋ฉด ์ตํฐ๋ง์ด์ ๋ Table Full Scan์ ์ํํ๋ค. ํน์, I/O๋ฅผ ์ค์ด๊ฑฐ๋ ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ ๊ฒฝ์ฐ Index Full Scan์ ์ ํํ๊ธฐ๋ ํ๋ค.
๊ทธ๋ฌ๋, Oracle 9i ๋ฒ์ ๋ถํฐ ์ ๋ ์ปฌ๋ผ์ด ๋น ์ง ๊ฒฝ์ฐ์๋ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ ์ ์๋๋ก ๋์
๋ ๋ฐฉ์์ด Index Skip Scan์ด๋ค.
์ด ๋ฐฉ์์ ์ ๋ ์ปฌ๋ผ์ Distinct Value ๊ฐ์๊ฐ ์ ๊ณ , ํํ ์ปฌ๋ผ์ Distinct Value ๊ฐ์๊ฐ ๋ง์ ๋ ํจ๊ณผ์ ์ด๋ค.
Index Skip Scan์ผ๋ก ์ ๋ํ๊ฑฐ๋ ๋ฐฉ์งํ๊ณ ์ ํ ๋, index_ss
, no_index_ss
ํํธ๋ฅผ ์ฌ์ฉํ๋ค.
(2) Index Skip Scan ๋์ ์๋ฆฌ
Index Skip Scan์ ๋ฃจํธ ๋ธ๋ก์ด๋ ๋ธ๋์น ๋ธ๋ก์์ ์ฝ์ ์ปฌ๋ผ ๊ฐ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก, ์กฐ๊ฑด์ ์ ๋ถํฉํ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ๋ฆฌํ ๋ธ๋ก๋ง ์ ํํ์ฌ ์ก์ธ์ค ํ๋ ๋ฐฉ์์ด๋ค.
์ฆ, ๋ถํ์ํ ๋ธ๋ก์ ๊ฑด๋๋ฐ๊ณ (Skip) ํ์ํ ๋ธ๋ก๋ง ์ก์ธ์ค ํ์ฌ ์ฑ๋ฅ์ ์ต์ ํํ๋ค. ์ด ๊ณผ์ ์์ ์ฒซ ๋ฒ์งธ ๋ฆฌํ ๋ธ๋ก๊ณผ ๋ง์ง๋ง ๋ฆฌํ ๋ธ๋ก์ ํญ์ ๋ฐฉ๋ฌธํ๋ฉฐ, ๊ทธ ์ค๊ฐ์์๋ ํ์ํ ๋ธ๋ก๋ง ๊ณจ๋ผ์ ํ์ํ๋ค.
Index Skip Scan์ Index Range Scan์ด ๋ถ๊ฐ๋ฅํ๊ฑฐ๋ ํจ์จ์ ์ด์ง ๋ชปํ ์ํฉ์์ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฌ๋, ์ด ๋ฐฉ์์ด ํญ์ ์ต์ ์ฑ ์ ์๋๋ฉฐ, ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ๋ฑ์ค๋ Index Range Scan์ ๋ชฉํ๋ก ์ค๊ณํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
์ฆ, ์์ฃผ ์คํ๋์ง ์๋ SQL์ ์ํด ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ๋นํจ์จ์ ์ผ ๋, ์ฐจ์ ์ฑ ์ผ๋ก ํ์ฉํ๋ ์ ๋ต์ด ๋ฐ๋์งํ๋ค.
(3) ๋ฒํผ Pinning์ ์ด์ฉํ Skip ์๋ฆฌ
Index Skip Scan์ ๋ฆฌํ ๋ธ๋ก์์ ๋ค์์ ๋ฐฉ๋ฌธํ ๋ธ๋ก์ ๋ฐ๋ก ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ์, ์์ ๋ธ๋์น ๋ธ๋ก์ ์ฌ๋ฐฉ๋ฌธํ์ฌ ๋ค์ ๋ฐฉ๋ฌธํ ๋ฆฌํ ๋ธ๋ก์ ์ฃผ์ ์ ๋ณด๋ฅผ ์ป๋ ๊ณผ์ ์ด ํ์ํ๋ค.
๊ทธ๋ฌ๋, Oracle์ ์ธ๋ฑ์ค ๊ตฌ์กฐ์ ๋ฆฌํ ๋ธ๋ก์๋ ์์ ๋ธ๋์น ๋ธ๋ก(ํน์ ๋ฃจํธ ๋ธ๋ก)์ ์ฃผ์ ์ ๋ณด๊ฐ ํฌํจ๋์ง ์๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฒํผ Pinning(Buffer Pinning) ๊ธฐ๋ฒ์ด ํ์ฉ๋๋ค.
โ๋ฒํผ Pinning
ํน์ ๋ธ๋ก์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ง(Pin)ํ ์ํ์์ ํ์ํ ๋ฆฌํ ๋ธ๋ก์ ๋ฐฉ๋ฌธํ ํ, ๋ค์ ๋ธ๋์น ๋ธ๋ก์ผ๋ก ๋๋์๊ฐ๋ ๋ฐฉ์
๋ธ๋์น ๋ธ๋ก์ Pinning ํ ์ํ์์ ๋ฆฌํ ๋ธ๋ก์ ํ์ํ๊ณ , ํ์ํ ๋ ๋ค์ ๋ธ๋์น ๋ธ๋ก์ผ๋ก ๋๋์์ ๋ค์ ๋ฆฌํ ๋ธ๋ก์ ์ฐพ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
์ด ๊ณผ์ ์์ ๋ฃจํธ ๋๋ ๋ธ๋์น ๋ธ๋ก์ ์ฌ๋ฐฉ๋ฌธํ๋๋ผ๋, Pinning ์ํ์ด๋ฏ๋ก ์ถ๊ฐ์ ์ธ ๋ธ๋ก I/O๋ ๋ฐ์ํ์ง ์๋๋ค.
(4) ์๋ ์กฐ๊ฑด
Index Skip Scan์ ์ ๋ ์ปฌ๋ผ์ Distinct Value ๊ฐ์๊ฐ ์ ๊ณ , ํํ ์ปฌ๋ผ์ Distinct Value ๊ฐ์๊ฐ ๋ง์ ๋ ์ ์ฉํ๋ค. ๊ทธ๋ฌ๋ ๋ฐ๋์ ์ ๋ ์ปฌ๋ผ์ด ๋น ์ ธ์ผ๋ง ์๋ํ๋ ๊ฒ์ ์๋๋ค.
์๋ฅผ ๋ค์ด, ์ธ๋ฑ์ค ๊ตฌ์ฑ์ด STATE - CUSTOMER_ID - ORDER_DATE
๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
โ ์ธ๋ฑ์ค ์ ๋ ์ปฌ๋ผ์ด WHERE ์ ์์ ๋๋ฝ๋๊ฑฐ๋ ๋ฒ์๊ฒ์ ์กฐ๊ฑด์ธ ๊ฒฝ์ฐ
Index Skip Scan์ WHERE ์กฐ๊ฑด์์ ์ ๋ ์ปฌ๋ผ์ด ๋๋ฝ๋ ๊ฒฝ์ฐ ์ธ์๋ ๋ฒ์ ๊ฒ์(BETWEEN
, LIKE
)์ ์ฌ์ฉํ ๋๋ ๋์ํ ์ ์๋ค.
์์ ์ฟผ๋ฆฌ์์ ์ผ๋ฐ์ ์ธ Index Range Scan์ ์ฌ์ฉํ๋ฉด STATUS๊ฐ 'P%'
๋ฅผ ๋ง์กฑํ๋ ๋ชจ๋ ์ธ๋ฑ์ค ๊ตฌ๊ฐ์ ์ ๋ถ ์ค์บํด์ผ ํ๋ค.
๊ทธ๋ฌ๋ Index Skip Scan์ ์ฌ์ฉํ๋ฉด, STATUS๊ฐ 'P%'
๋ฅผ ๋ง์กฑํ๋ ์ธ๋ฑ์ค ๊ตฌ๊ฐ์์ CUSTOMER_ID = '2'
๋ฅผ ํฌํจํ ๊ฐ๋ฅ์ฑ์ด ์๋ ๋ฆฌํ ๋ธ๋ก๋ง ๊ณจ๋ผ์ ์ก์ธ์ค ํ ์ ์๋ค.
์ด์ฒ๋ผ, ์ ๋ ์ปฌ๋ผ์ด ๋๋ฝ๋ ๊ฒฝ์ฐ๋ง๊ณ ๋ ๋ฒ์ ๊ฒ์(LIKE
, BETWEEN
, <
, >
)์ ์ฌ์ฉํ ๋๋ Index Skip Scan์ด ์ ์ฉํ ์ ์๋ค.
โก ์ค๊ฐ ์ปฌ๋ผ์ด WHERE ์ ์์ ๋๋ฝ๋ ๊ฒฝ์ฐ
์ธ๋ฑ์ค ์ ๋ ์ปฌ๋ผ์ด ์์ ๋๋ง ์๋ํ๋ ๊ฒ์ ์๋๋ค. ํ ์ด๋ธ์ ์ ๋ ์ปฌ๋ผ์ด ์กฐ๊ฑด์ ์ ํฌํจ๋์์ง๋ง, **์ค๊ฐ ์ปฌ๋ผ์ด ๋น ์ง ๊ฒฝ์ฐ์๋ Index Skip Scan์ ์ฌ์ฉํ ์ ์๋ค.
โข Distinct Value ๊ฐ์๊ฐ ์ ์ ์ ๋ ์ปฌ๋ผ์ด ์ฌ๋ฌ ๊ฐ ๋๋ฝ๋ ๊ฒฝ์ฐ
Index Skip Scan์ Distinct Value ๊ฐ์๊ฐ ์ ์ ๋ ๊ฐ ์ด์์ ์ ๋ ์ปฌ๋ผ์ด ๋๋ฝ๋ ๊ฒฝ์ฐ์๋ ์ฌ์ฉ๋ ์ ์๋ค. ์ฆ, ์ธ๋ฑ์ค์ ์ฌ๋ฌ ๊ฐ ์ ๋ ์ปฌ๋ผ์ด ์กฐ๊ฑด์ ์ ํฌํจ๋์ง ์๋๋ผ๋ Index Skip Scan์ด ๊ฐ๋ฅํ ์ ์๋ค.
๐๏ธ Index Fast Full Scan
(1) Index Fast Full Scan ์ด๋?
Index Fast Full Scan์ ์ธ๋ฑ์ค์ ๋ ผ๋ฆฌ์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ฌด์ํ๊ณ , ์ธ๋ฑ์ค ์ธ๊ทธ๋จผํธ ์ ์ฒด๋ฅผ Multiblock I/O ๋ฐฉ์์ผ๋ก ์ค์บํ๋ ๊ฒ์ ๋ฐฉ์์ด๋ค. ์ด๋ Index Full Scan๋ณด๋ค ๋น ๋ฅด๋ฉฐ, ํน์ ์ํฉ์์ Table Full Scan์ ๋์ฒดํ ์ ์๋ค.
Index Full Scan์ ์ธ๋ฑ์ค์ ๋ ผ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ ๋ฃจํธ ๋ธ๋ก → ๋ธ๋์น ๋ธ๋ก → ๋ฆฌํ ๋ธ๋ก ์์ผ๋ก ์์ฐจ์ ์ผ๋ก ํ์ํ๋ค.
๋ฐ๋ฉด, Index Fast Full Scan์ ๋
ผ๋ฆฌ์ ์ธ๋ฑ์ค ๊ตฌ์กฐ๋ฅผ ๋ฌด์ํ๊ณ , ๋์คํฌ์ ์ ์ฅ๋ ๋ฌผ๋ฆฌ์ ์์๋๋ก ๋ฆฌํ ๋ธ๋ก์ ์ฝ๋ ๋ฐฉ์์ด๋ค.
์ด ๊ณผ์ ์์ Multiblock I/O ๊ธฐ๋ฒ์ด ์ฌ์ฉ๋๋ฉฐ, ํ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ๋ธ๋ก์ ์ฝ์ด ์ฑ๋ฅ์ ํฅ์ํ๋ค. Multiblock I/O ํฌ๊ธฐ๋ db_file_multiblock_read_count
ํ๋ผ๋ฏธํฐ์ ์ํด ๊ฒฐ์ ๋๋ค.
(2) Index Fast Full Scan์ ํน์ง
- Hint :
index_ffs
,no_index_ffs
- Multiblock I/O ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๋๋์ ๋ธ๋ก์ ํ ๋ฒ์ ์ฝ๋๋ค.
- ์๋๋ ๋น ๋ฅด์ง๋ง, ์ธ๋ฑ์ค ํค ์์๋๋ก ์ ๋ ฌ๋์ง ์๋๋ค.
- ์ธ๋ฑ์ค์ ํฌํจ๋ ์ปฌ๋ผ๋ง ์กฐํํ๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ ์ ์๋ค.
- Index Full Scan ๋๋ Index Range Scan๊ณผ ๋ฌ๋ฆฌ, ์ธ๋ฑ์ค๊ฐ ํํฐ์ ๋ผ ์์ง ์๋๋ผ๋ ๋ณ๋ ฌ ์ฟผ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
- ๋ณ๋ ฌ ์ฟผ๋ฆฌ ์์๋ Direct Path I/O ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ I/O ์๋๊ฐ ๋ ๋นจ๋ผ์ง๋ค.
โ๏ธ Index Full Scan vs. Index Fast Full Scan
Index Full Scan | Index Fast Full Scan |
---|---|
์ธ๋ฑ์ค ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ Scan | ์ธ๋ฑ์ค ์ธ๊ทธ๋จผํธ ์ ์ฒด๋ฅผ Scan |
๊ฒฐ๊ณผ ์งํฉ ์ ๋ ฌ โญ | ๊ฒฐ๊ณผ ์งํฉ ์ ๋ ฌ โ |
Single Block I/O | Multiblock I/O |
๋ณ๋ ฌ Scan ๋ถ๊ฐ (ํํฐ์ ๋ ๋ถ๊ฐ) | ๋ณ๋ ฌ Scan ๊ฐ๋ฅ |
์ ๋ ์ปฌ๋ผ ์กฐ๊ฑด๋ง ํฌํจ๋๋ฉด OK | ์ธ๋ฑ์ค์ ํฌํจ๋ ์ปฌ๋ผ์ผ๋ก๋ง ์กฐํ ๊ฐ๋ฅ |
(3) Index Fast Full Scan์ ํ์ฉํ ํ๋ ์ฌ๋ก
๋ณดํต LIKE '%์
์ฒด๋ช
%'
๊ฐ์ Index Range Scan์ด ๋ถ๊ฐ๋ฅํ ์ฟผ๋ฆฌ๋ Table Full Scan์ ์ํํด์ผ ํ๋ฏ๋ก ์๋๊ฐ ์ ํ๋ ์ ์๋ค. ํ์ง๋ง, ๊ฒฐ๊ณผ ๊ฑด์๊ฐ ์ ๊ณ , ํ
์ด๋ธ ์ ์ฒด๋ฅผ ์ฝ์ด์ผ ํ๋ ๊ฒฝ์ฐ Index Fast Full Scan์ด ์ ์ฉํ ์ ์๋ค. ๋ํ, ์ฟผ๋ฆฌ์์ ์ฌ์ฉ๋๋ ์ธ๋ฑ์ค๊ฐ ์์ฃผ ์กฐํ๋์ง ์์, ๋์คํฌ I/O๊ฐ ๋ง์์ง๋ ๊ฒฝ์ฐ์๋ ํจ๊ณผ์ ์ด๋ค.
Index Fast Full Scan์ ํน์ง์ ์ดํดํ๋ฉด, ํ
์ด๋ธ์ BCHR(๋ฒํผ ์บ์ ํํธ์จ)๊ฐ ๋ฎ์ ๋์คํฌ I/O๊ฐ ๋ง์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ ํนํ ์ ๋ฆฌํ๋ค๋ ์ ์ ์ ์ ์๋ค.
๊ทธ๋ฌ๋, Index Fast Full Scan์ ์ธ๋ฑ์ค์ ํฌํจ๋ ์ปฌ๋ผ์ผ๋ก๋ง ์กฐํํ ์ ์๋ค๋ ์ ์ฝ์ด ์๋ค. ์ฆ, ์ฟผ๋ฆฌ๊ฐ ํ
์ด๋ธ์ ์ถ๊ฐ ์ปฌ๋ผ์ ํ์๋ก ํ๋ฉด ๋นํจ์จ์ ์ผ ์ ์๋ค.
์ด๋ฌํ ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก Index Fast Full Scan์ ํ์ฉํ๋ฉด ์ฑ๋ฅ์ ์ต์ ํํ ์ ์๋ค.
SELCT /*+ ORDERED USE_NL(B) NO_MERGE ROWID(B)*/ B.*
FROM (
SELECT /*+INDEX_FFS(IDX_X)*/ ROWID RID
FROM TABLE
WHERE INSTR(์
์ฒด๋ช
, '์
์ฒด๋ช
') > 0
) A, TABLE B
WHERE B.ROWID = A.ROWID
- IDX_X ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ฌ Fast Full Scan์ ์ํํ๋ค.
- LIKE ์ฐ์ฐ๋ณด๋ค ๋น ๋ฅธ INSTR ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ ๊ฒ์ ์๋๋ฅผ ๋์ธ๋ค.
- ์ฐพ์ ROWID๋ฅผ ์ด์ฉํด ํ
์ด๋ธ์ ๋ค์ ์ก์ธ์ค ํ๋ค.
- ๋ถํ์ํ ๋ธ๋ก I/O๋ฅผ ์ต์ํํ์ฌ ์ฑ๋ฅ์ ๊ฐ์ ํ๋ค.
์ด๋ฌํ ์์ด๋์ด๋ Index Fast Full Scan ์ ํตํด ์ค์บํด์ผ ํ ๊ฑด์๊ฐ ๋ง๋๋ผ๋ ์กฐ๊ฑด์ ์ ์ํด ํํฐ๋ง๋๊ณ ๋์์ ์ต์ข ๊ฒฐ๊ณผ๊ฑด์๋ ์ ๋ค๋๋ฐ์ ์ฐฉ์ํ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋, ๊ฒ์๋ ๊ฒฐ๊ณผ ๊ฑด์๊ฐ ๋ง์ผ๋ฉด, ํ ์ด๋ธ์ ๋ํ Random Access๊ฐ ๋ง์์ ธ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
ํ์ง๋ง, ๋ถ๋ถ ๋ฒ์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์
ํ๊ฒฝ์ด๋ผ๋ฉด ์คํ๋ ค ํจ์จ์ ์ผ ์ ๋ค. (11g ์ด์์ด๋ผ๋ฉด, ๊ฒฐ๊ณผ ๊ฑด์๊ฐ ๋ง๋๋ผ๋ ์ธ๋ผ์ธ๋ทฐ์ ORDER BY ROWID
๋ฅผ ์ถ๊ฐํ๋ฉด ์ฑ๋ฅ์ ๋์ฑ ์ต์ ํํ ์ ์๋ค.)
๐๏ธ Index Range Scan Descending
Index Range Scan Descending์ ๊ธฐ๋ณธ์ ์ธ Index Range Scan๊ณผ ๋์ผํ์ง๋ง, ์ธ๋ฑ์ค๋ฅผ ๋ค์์๋ถํฐ ์์ชฝ์ผ๋ก ์ค์บํ์ฌ ๋ด๋ฆผ์ฐจ์(DESC
) ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๋ ๋ฐฉ์์ด๋ค. ์ตํฐ๋ง์ด์ ๊ฐ ์๋์ผ๋ก ์คํ ๊ณํ์ ์๋ฆฝํ์ง๋ง, ํ์ํ ๊ฒฝ์ฐ index_desc
ํํธ๋ฅผ ์ฌ์ฉํด ์ ๋ํ ์ ์๋ค.
'DB > SQLP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQLP] 2-2. ์ธ๋ฑ์ค ํ์ฉ (0) | 2025.02.23 |
---|---|
[SQLP] 2-1. ์ธ๋ฑ์ค ๊ตฌ์กฐ (0) | 2025.02.22 |
[SQLP] 1-5. I/O ๋ฉ์ปค๋์ฆ (0) | 2025.02.11 |
[SQLP] 1-4. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์บ์ ์ต์ ํ (0) | 2025.02.09 |
[SQLP] 1-3. SQL ๊ณต์ ๋ฐ ์ฌ์ฌ์ฉ (0) | 2025.02.09 |