λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“š Database/Oracle

[Oracle] 인덱슀(Index)λž€? (feat. C.R.U.D)

by Fomagran πŸ’» 2022. 3. 5.
728x90
λ°˜μ‘ν˜•

μ•ˆλ…•ν•˜μ„Έμš” FomaπŸ’» μž…λ‹ˆλ‹€.

 

μ˜€λŠ˜μ€ μ›ν•˜λŠ” 데이터λ₯Ό μ‰½κ²Œ 찾아쀄 수 μžˆλ„λ‘ 미리 정리λ₯Ό ν•΄λ†“λŠ” μΈλ±μŠ€μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄λ €κ³  ν•©λ‹ˆλ‹€.

 

λ°”λ‘œ μ‹œμž‘ν• κ²Œμš”~


인덱슀(Index)λž€?

 

μΈλ±μŠ€λŠ” λ°μ΄ν„°λ² μ΄μŠ€ 뢄야에 μžˆμ–΄μ„œ ν…Œμ΄λΈ”μ— λŒ€ν•œ λ™μž‘μ˜ 속도λ₯Ό λ†’μ—¬μ£ΌλŠ” 자료 ꡬ쑰λ₯Ό μΌμ»«λŠ”λ‹€. μΈλ±μŠ€λŠ” ν…Œμ΄λΈ” λ‚΄μ˜ 1개의 컬럼, ν˜Ήμ€ μ—¬λŸ¬ 개의 μ»¬λŸΌμ„ μ΄μš©ν•˜μ—¬ 생성될 수 μžˆλ‹€. κ³ μ†μ˜ 검색 λ™μž‘λΏλ§Œ μ•„λ‹ˆλΌ λ ˆμ½”λ“œ μ ‘κ·Όκ³Ό κ΄€λ ¨ 효율적인 μˆœμ„œ 맀김 λ™μž‘μ— λŒ€ν•œ 기초λ₯Ό μ œκ³΅ν•œλ‹€. 인덱슀λ₯Ό μ €μž₯ν•˜λŠ” 데 ν•„μš”ν•œ λ””μŠ€ν¬ 곡간은 보톡 ν…Œμ΄λΈ”μ„ μ €μž₯ν•˜λŠ” 데 ν•„μš”ν•œ λ””μŠ€ν¬ 곡간보닀 μž‘λ‹€. (μ™œλƒν•˜λ©΄ 보톡 μΈλ±μŠ€λŠ” ν‚€-ν•„λ“œλ§Œ κ°–κ³  있고, ν…Œμ΄λΈ”μ˜ λ‹€λ₯Έ μ„ΈλΆ€ ν•­λͺ©λ“€μ€ κ°–κ³  μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ΄λ‹€.) κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” μΈλ±μŠ€λŠ” ν…Œμ΄λΈ” 뢀뢄에 λŒ€ν•œ ν•˜λ‚˜μ˜ 사본이닀. - μœ„ν‚€ λ°±κ³Ό -

 

즉, μΈλ±μŠ€λŠ” ν…Œμ΄λΈ”μ˜ 검색 속도λ₯Ό ν–₯μƒμ‹œν‚€λŠ” μžλ£Œκ΅¬μ‘°μž…λ‹ˆλ‹€.

 

μ‰½κ²Œ μ„€λͺ…ν•˜λ©΄ μ›ν•˜λŠ” 책을 μ°ΎλŠ” 것과 λΉ„μŠ·ν•©λ‹ˆλ‹€.

 

μ•„λž˜μ™€ 같이 책이 정리가 μ•ˆλœ μƒνƒœλ‘œ 있으면 일일이 λͺ¨λ“  책듀을 ν™•μΈν•˜λ©° μ°Ύμ•„μ•Ό ν•  κ²ƒμž…λ‹ˆλ‹€.

 

λ§Œμ•½ 정리λ₯Ό μ•ˆν•œ μƒνƒœλ‘œ 맀번 κ·Έ 책을 찾으렀고 ν•˜λ©΄ 맀번 μ‹œκ°„μ΄ 낭비될 κ²ƒμž…λ‹ˆλ‹€.

 

좜처:https://www.artinsight.co.kr/news/view.php?no=40654

 

ν•˜μ§€λ§Œ λ„μ„œκ΄€μ²˜λŸΌ γ„±,γ„΄,γ„·,γ„Ή... 으둜 책을 λ”°λ‘œ 정리해두면 μ°ΎκΈ°κ°€ 훨씬 μ‰¬μ›Œμ§€κ² μ£ ?

 

λ°”λ‘œ μ΄λ ‡κ²Œ 자주 μ°ΎλŠ” 책듀을 λ”°λ‘œ 정리λ₯Ό ν•΄λ‘λŠ” 것이 λ°”λ‘œ μΈλ±μŠ€μž…λ‹ˆλ‹€.

 

좜처:https://m.khan.co.kr/life/health/article/201708171135002


인덱슀의 자료ꡬ쑰

 

1. 해쉬 ν…Œμ΄λΈ”

 

μ±…λ§ˆλ‹€ μœ„μΉ˜λ₯Ό 미리 μ €μž₯해놓고 μ›ν•˜λŠ” 책을 찾을 λ•Œ ν•΄λ‹Ή μ±… 이름을 검색해 μœ„μΉ˜λ₯Ό μ•Œμ•„λ‚΄λ©΄ 

 

ꡉμž₯히 λΉ λ₯΄κ²Œ 책을 찾을 수 있겠죠?

 

μœ„μ™€ 같은 방법이 λ°”λ‘œ 해쉬 ν…Œμ΄λΈ”(Hash Table) μž…λ‹ˆλ‹€.

 

(해쉬 ν…Œμ΄λΈ”μ— λŒ€ν•΄μ„œ 잘 λͺ¨λ₯΄μ‹œλŠ” 뢄듀은 μ—¬κΈ° μ—μ„œ ν™•μΈν•΄μ£Όμ„Έμš”!)

 

좜처:https://open4tech.com/array-vs-linked-list-vs-hash-table/

 

ν•˜μ§€λ§Œ λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€λŠ” 해쉬 ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

 

λ§Œμ•½ μ±… 제λͺ©μ΄ 기얡이 잘 μ•ˆλ‚˜ 'κ°€'둜 μ‹œμž‘ν•˜λŠ” 책을 μ°Ύκ³  μ‹Άλ‹€λ©΄ μ–΄λ–‘ν•΄μ•Ό ν• κΉŒμš”?

 

해쉬 ν…Œμ΄λΈ”λ‘œ 된 μžλ£Œκ΅¬μ‘°λŠ” λͺ¨λ“  책을 일일이 μ‘°νšŒν•΄μ•Ό ν•  κ²ƒμž…λ‹ˆλ‹€.

 

2. B+ Tree

 

μœ„μ™€ 같은 해쉬 ν…Œμ΄λΈ”μ˜ 단점을 λ³΄μ•ˆν•˜μ—¬ λ‚˜μ˜¨ 것이 λ°”λ‘œ B+Tree μž…λ‹ˆλ‹€.

 

(B Tree에 λŒ€ν•΄ 잘 λͺ¨λ₯΄μ‹œλŠ” 뢄듀은 μ—¬κΈ° μ—μ„œ ν™•μΈν•΄μ£Όμ„Έμš”!)

 

μ•„λž˜μ™€ 같이 제λͺ©μ˜ μˆœμ„œμ— 따라 책듀을 정리해 놓고 ν•΄λ‹Ήλ˜λŠ” μœ„μΉ˜λ₯Ό μ°Ύμ•„κ°€λŠ” 것이죠!

 

γ„± - κ°€,게,κΈ°,κ³ ,ꡬ...

γ„΄ - λ‚˜,λ„€,λ‹ˆ,λ…Έ,λˆ„...

γ„· - λ‹€,데,λ””,도,두...

...

 

'κ°€μœ„' λΌλŠ” 책을 찾으렀면 γ„± - κ°€ - κ°€μœ„ <- μ•„λž˜μ™€ 같은 μˆœμ„œλ‘œ 찾으면 훨씬 μ‰½κ²Œ 찾을 수 있겠죠?

 

 

 

좜처:https://www.google.com/url?sa=i&amp;amp;amp;url=https%3A%2F%2Ftowardsdatascience.com%2F8-useful-tree-data-structures-worth-knowing-8532c7231e8c&amp;amp;amp;psig=AOvVaw1Pxlu7nYa3ddnGsSnppmHO&amp;amp;amp;ust=1646508781505000&amp;amp;amp;source=images&amp;amp;amp;cd=vfe&amp;amp;amp;ved=0CAsQjRxqFwoTCOi_kbGZrfYCFQAAAAAdAAAAABAE

 


κ·Έλ ‡λ‹€λ©΄ λͺ¨λ“  ν…Œμ΄λΈ”μ„ 인덱슀둜 λ§Œλ“€λ©΄ λ˜μ§€ μ•Šλ‚˜? πŸ€”

 

정닡은 '그렇지 μ•Šλ‹€' μž…λ‹ˆλ‹€.

 

ꡉμž₯히 λ§Žμ€ 책듀이 μžˆλ‹€λ©΄, 미리 정리해 놓고 λ‹€μŒλΆ€ν„° 책을 찾을 λ•Œ λΉ λ₯΄κ²Œ μ°ΎλŠ” 것이 효율적일 κ²ƒμž…λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ μ•„λž˜μ™€ 같이 책이 λͺ‡ ꢌ μ—†λŠ” μƒνƒœλΌλ©΄ μ–΄λ–¨κΉŒμš”?

 

좜처:https://kr.freepik.com/premium-psd/realistic-3-book-softcover-mockup_11158411.htm

 

빨간색 책을 μ°ΎκΈ° μœ„ν•΄ μ±…μ˜ 제λͺ©λŒ€λ‘œ 정리λ₯Ό ν•œ 뒀에 빨간색 제λͺ©μ— ν•΄λ‹Ήν•˜λŠ” 책을 μ°ΎλŠ” 것보닀 κ·Έλƒ₯ 책을 μ°ΎλŠ” 것이 훨씬 λΉ λ₯΄κ² μ£ ?

 

즉, μ •λ¦¬ν•˜λŠ” μ‹œκ°„μ΄ 책을 μ°ΎλŠ” μ‹œκ°„λ³΄λ‹€ 더 μ‚¬μš©λ˜λ―€λ‘œ 이 λ•ŒλŠ” 인덱슀λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 더 λΉ„νš¨μœ¨μ μΈ λ°©λ²•μž…λ‹ˆλ‹€.

 

고둜 인덱슀 자료ꡬ쑰λ₯Ό λ§Œλ“€ λ•ŒλŠ” 규λͺ¨κ°€ μž‘μ§€ μ•Šμ€ ν…Œμ΄λΈ”, μ—¬λŸ¬ 번 생성,μˆ˜μ •,μ‚­μ œκ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” ν…Œμ΄λΈ”μ΄ μ ν•©ν•©λ‹ˆλ‹€.


생성

 

생성방법은 μ•„λž˜μ™€ 같이 ν•˜μ‹œλ©΄ μž‘μ„±ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.

 

기본적으둜 μ˜€λ¦„μ°¨μˆœ(ASCENDING)으둜 되기 λ•Œλ¬Έμ— λ‚΄λ¦Ό 차순으둜 λ§Œλ“€ λ•ŒλŠ” ν•„λ“œ 이름 뒀에 DESCλ₯Ό λΆ™μ—¬μ€λ‹ˆλ‹€.

 

CREATE INDEX μΈλ±μŠ€μ΄λ¦„ ON μ •λ ¬ν• ν…Œμ΄λΈ”(μ •λ ¬ν•„λ“œ);

 

κ²Œμž„ ν”Œλ ˆμ΄ μ •λ³΄μ—μ„œ 이름 순으둜 λ‚΄λ¦Ό 차순 μ •λ ¬ 인덱슀

 

CREATE INDEX NAME_DSC ON GAME_TB(NAME DESC);

 

μ•„λž˜μ™€ 같이 Index탭에 NAME_DSCκ°€ 생긴 κ±Έ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 


쑰회

 

ν…Œμ΄λΈ”μ— μžˆλŠ” 인덱슀λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

SELECT * FROM ALL_INDEXES WHERE TABLE_NAME = 'ν…Œμ΄λΈ” 이름';

 

κ²Œμž„ ν…Œμ΄λΈ”μ˜ 인덱슀λ₯Ό ν™•μΈν•˜λ©΄,

 

SELECT * FROM ALL_INDEXES WHERE TABLE_NAME = 'GAME_TB';

 

μ•„λž˜μ™€ 같이 μœ„μ—μ„œ μƒμ„±ν•œ NAME_DSC 인덱슀λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 


μž¬μƒμ„±

 

B+ TREE 자료ꡬ쑰 νŠΉμ„± 상 ν…Œμ΄λΈ”μ— λŒ€ν•œ λ‚΄μš©μ΄ μˆ˜μ •(특히 제거)될 λ–„ μΈλ±μŠ€μ—μ„œ μ œκ±°κ°€ λ˜μ§€ μ•ŠλŠ” 상황이 λ°œμƒν•  λ•Œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

 

고둜 λΆˆν•„μš”ν•œ 곡간을 μ°¨μ§€ν•˜λŠ” 것을 λ‹€μ‹œ μž¬λ°°μΉ˜ν•˜κΈ° μœ„ν•΄ μž¬μƒμ„±μ‹œμΌœν•  λ•Œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

 

λ°”λ‘œ μ•„λž˜μ™€ 같이 REBUILDλ₯Ό μ΄μš©ν•΄ μž¬μ„±μ„± μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

ALTER INDEX μΈλ±μŠ€μ΄λ¦„ REBUILD;

μˆ˜μ •

 

인덱슀 μžμ²΄λŠ” μˆ˜μ •ν•˜λŠ” 방법이 μ—†κ³ , 이름을 μˆ˜μ •ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆλ‹€.

 

ALTER INDEX μΈλ±μŠ€μ΄λ¦„ RENAME TO λ°”κΏ€μΈλ±μŠ€μ΄λ¦„;

 

μœ„μ—μ„œ λ§Œλ“  NAME_DSCλ₯Ό NAME_DESC둜 λ°”κΎΈλŠ” λ°©λ²•μž…λ‹ˆλ‹€.

 

ALTER INDEX NAME_DSC RENAME TO NAME_DESC;

 

μ•„λž˜μ™€ 같이 인덱슀 이름이 NAME_DESC둜 λ³€κ²½λ©λ‹ˆλ‹€.

 


μ‚­μ œ

 

DROP INDEX μΈλ±μŠ€μ΄λ¦„;

 

μœ„μ—μ„œ λ§Œλ“  NAME_DESCλ₯Ό μ‚­μ œν•˜λ €λ©΄ μ•„λž˜μ™€ 같이 μž‘μ„±ν•΄ μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€.

 

DROP INDEX NAME_DESC;
728x90
λ°˜μ‘ν˜•

λŒ“κΈ€