ORACLE

#27 [ORACLE] 인덱슀, κΈ°λ³Έν‚€, constraint, μ½”λ“œ, 데이터 νƒ€μž…, commit, μ •κ·œν™”

dP fla 2022. 11. 9. 17:59

πŸ“Œ 인덱슀

: 데이터 λ ˆμ½”λ“œλ₯Ό λΉ λ₯΄κ²Œ μ ‘κ·Όν•˜κΈ° μœ„ν•΄μ„œ [ν‚€ : 포인터 ] 쌍으둜 κ΅¬μ„±λ˜λŠ” 데이터 ꡬ쑰

DB의 ν…Œμ΄λΈ”μ— 데이터가 λ§Žμ„ λ•Œ, 검색 속도λ₯Ό ν–₯상해주기 μœ„ν•΄ μ‚¬μš©ν•˜λŠ” 객체

ν•˜μ§€λ§Œ, 인덱슀λ₯Ό μƒμ„±ν•œλ‹€κ³  무쑰건 데이터λ₯Ό λΉ λ₯΄κ²Œ 검색할 수 μžˆλŠ” 것은 μ•„λ‹˜

인덱슀λ₯Ό μƒμ„±ν•˜λ©΄ 인덱슀λ₯Ό μœ„ν•œ λ””μŠ€ν¬ 곡간이 ν•„μš”ν•˜κ³  인덱슀λ₯Ό ν¬ν•¨ν•œ ν…Œμ΄λΈ”μ— μž‘μ—…μ„ ν•  경우,

인덱슀 정렬을 μœ„ν•œ 더 λ§Žμ€ λΉ„μš©κ³Ό μ‹œκ°„μ΄ ν•„μš”ν•˜κΈ° λ•Œλ¬Έ.

 

인덱슀 생성 μ‹œ ν•΄λ‹Ή ν…Œμ΄λΈ”μ˜ μ˜λ„λ₯Ό νŒŒμ•…ν•œ 후에 상황에 맞게 μ μ ˆν•œ 인덱슀둜 ꡬ성해야 ν•œλ‹€

 

πŸ’‘ ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀 (Clustered Index)

: μ±… μ•žμ— μžˆλŠ” λͺ©μ°¨ (νŽ˜μ΄μ§€λ‘œ λ°”λ‘œ κ·Έ νŽ˜μ΄μ§€λ₯Ό 펼 수 있음), 항상 μˆœμ„œλ₯Ό μœ μ§€ν•΄μ•Ό ν•˜λŠ” 인덱슀

 

ν΄λŸ¬μŠ€ν„°λ“œ 인덱슀 μˆœμ„œλ‘œ λ ˆμ½”λ“œλ“€μ΄ ν•˜λ“œ λ””μŠ€ν¬μ— μ €μž₯이 됨

ν΄λŸ¬μŠ€ν„°λ“œ 인덱슀λ₯Ό λ”°λ‘œ μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ κΈ°λ³Έν‚€κ°€ ν΄λŸ¬μŠ€ν„°λ“œ μΈλ±μŠ€κ°€ 됨

ν…Œμ΄λΈ” 생성 μ‹œ κΈ°λ³Έν‚€λ₯Ό μ§€μ •ν•˜λ©΄ κ·Έ μΉΌλŸΌμ€ μžλ™μœΌλ‘œ ν΄λŸ¬μŠ€ν„°λ“œ μΈλ±μŠ€κ°€ λ§Œλ“€μ–΄μ§

 

데이터 μž…λ ₯, μˆ˜μ •, μ‚­μ œ (INSERT, DELETE, UPDATE) μ‹œ 항상 μ •λ ¬ μƒνƒœλ₯Ό μœ μ§€ν•΄μ•Ό ν•œλ‹€

πŸ‘‰ λ°μ΄ν„°μ˜ μž…λ ₯, μˆ˜μ •, μ‚­μ œμ˜ 속도가 느림

 

물리적으둜 항상 μ •λ ¬λ˜μ–΄ μžˆμœΌλ―€λ‘œ 쑰회(SELECT) μ†λ„λŠ” 빠름

πŸ“˜ NOTE
ν…Œμ΄λΈ” 데이터가 자주 μ—…λ°μ΄νŠΈλ˜μ§€ μ•ŠλŠ” 경우
항상 μ •λ ¬λœ λ°©μ‹μœΌλ‘œ 데이터λ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•˜λŠ” 경우
읽기 μž‘μ—…μ΄ μ›”λ“±νžˆ λ§Žμ€ 경우 , ν΄λŸ¬μŠ€ν„°ν˜• μΈλ±μŠ€κ°€ 더 λΉ λ₯΄λ‹€

 

πŸ’‘ λ…Ό ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀 (Non Clustered Index)

: μ±… 뒀에 μžˆλŠ” 색인 (찾고자 ν•˜λŠ” λ‚΄μš©μ˜ νŽ˜μ΄μ§€λ₯Ό λ¨Όμ € μ°Ύκ³  κ·Έ νŽ˜μ΄μ§€λ‘œ 이동)

 

λ ˆμ½”λ“œμ˜ 원본은 μ •λ ¬λ˜μ§€ μ•Šκ³ , 인덱슀 νŽ˜μ΄μ§€λ§Œ 정렬됨

데이터 νŽ˜μ΄μ§€λ₯Ό κ±΄λ“œλ¦¬μ§€ μ•Šκ³ , λ³„λ„μ˜ μž₯μ†Œμ— 인덱슀 νŽ˜μ΄μ§€λ₯Ό 생성함

πŸ‘‰ μš©λŸ‰μ„ 더 차지함

 

ν΄λŸ¬μŠ€ν„°ν˜•λ³΄λ‹€ 검색 μ†λ„λŠ” 더 λŠλ¦¬μ§€λ§Œ λ°μ΄ν„°μ˜ μž…λ ₯, μˆ˜μ •, μ‚­μ œλŠ” 더 λΉ λ₯΄λ‹€. 

πŸ“˜ NOTE
쑰건문을 ν™œμš©ν•˜μ—¬ ν…Œμ΄λΈ”μ„ ν•„ν„°λ§ν•˜κ³ μž ν•  경우
데이터가 자주 μ—…λ°μ΄νŠΈλ  경우
νŠΉμ • 칼럼이 μΏΌλ¦¬μ—μ„œ 자주 μ‚¬μš©λ  경우

πŸ“Œ Key

: DBμ—μ„œ 쑰건에 λ§Œμ‘±ν•˜λŠ” νŠœν”Œμ„ μ°Ύκ±°λ‚˜ μˆœμ„œλŒ€λ‘œ μ •λ ¬ν•  λ•Œ λ‹€λ₯Έ νŠœν”Œλ“€κ³Ό ꡬ별할 수 μžˆλŠ” μœ μΌν•œ 기쀀이 λ˜λŠ” 속성

πŸ’‘ νŠœν”Œ (Tuple) : λ¦΄λ ˆμ΄μ…˜μ„ κ΅¬μ„±ν•˜λŠ” 각각의 ν–‰, μ†μ„±μ˜ λͺ¨μž„μœΌλ‘œ ꡬ성 ( λ ˆμ½”λ“œμ™€ λΉ„μŠ·ν•œ κ°œλ… )

ν‚€μ˜ μ’…λ₯˜

1. 후보 ν‚€ (Candidate Key)

: λ¦΄λ ˆμ΄μ…˜μ„ κ΅¬μ„±ν•˜λŠ” 속성듀 μ€‘μ—μ„œ νŠœν”Œμ„ μœ μΌν•˜κ²Œ 식별할 수 μžˆλŠ” μ†μ„±λ“€μ˜ λΆ€λΆ„ 집합을 의미

λͺ¨λ“  λ¦΄λ ˆμ΄μ…˜μ€ λ°˜λ“œμ‹œ ν•˜λ‚˜ μ΄μƒμ˜ 후보 ν‚€λ₯Ό κ°€μ Έμ•Ό 함

λ¦΄λ ˆμ΄μ…˜μ— μžˆλŠ” λͺ¨λ“  νŠœν”Œμ— λŒ€ν•΄μ„œ μœ μΌμ„±κ³Ό μ΅œμ†Œμ„±μ„ λ§Œμ‘±μ‹œμΌœμ•Ό 함

 

2. κΈ°λ³Έν‚€ (Primary Key)

: 후보 ν‚€ μ€‘μ—μ„œ μ„ νƒν•œ μ£Όν‚€

ν•œ λ¦΄λ ˆμ΄μ…˜μ—μ„œ νŠΉμ • νŠœν”Œμ„ μœ μΌν•˜κ²Œ ꡬ별할 수 μžˆλŠ” 속성

 Null 값을 κ°€μ§ˆ 수 μ—†μŒ (개체 무결성) 

 κΈ°λ³Έν‚€λ‘œ μ •μ˜λœ μ†μ„±μ—λŠ” λ™μΌν•œ 값이 μ€‘λ³΅λ˜μ–΄ μ €μž₯될 수 μ—†μŒ (개체 무결성) 

 

3. λŒ€μ²΄ν‚€ (Alternate Key)

: 후보 ν‚€κ°€ λ‘˜ 이상일 λ•Œ, κΈ°λ³Έν‚€λ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€ 후보킀

후보킀, κΈ°λ³Έν‚€, λŒ€μ²΄ν‚€

4. 슈퍼 ν‚€ (Super Key)

: ν•œ λ¦΄λ ˆμ΄μ…˜ 내에 μžˆλŠ” μ†μ„±λ“€μ˜ μ§‘ν•©μœΌλ‘œ κ΅¬μ„±λœ ν‚€

μœ μΌμ„±μ€ λ§Œμ‘±ν•˜μ§€λ§Œ, μ΅œμ†Œμ„±μ€ λ§Œμ‘±μ‹œν‚€μ§€ λͺ»ν•¨

 

5. μ™Έλž˜ ν‚€ (Foreign Key)

: 관계λ₯Ό λ§Ίκ³  μžˆλŠ” λ¦΄λ ˆμ΄μ…˜ R1, R2μ—μ„œ R1이 μ°Έμ‘°ν•˜κ³  μžˆλŠ” R2의 기본킀와 같은 R1의 속성

μ™Έλž˜ ν‚€λŠ” μ°Έμ‘°λ˜λŠ” λ¦΄λ ˆμ΄μ…˜μ˜ 기본킀와 λŒ€μ‘λ˜μ–΄ λ¦΄λ ˆμ΄μ…˜ 간에 μ°Έμ‘° 관계λ₯Ό ν‘œν˜„ν•˜λŠ”λ° μ€‘μš”ν•œ λ„κ΅¬λ‘œ μ‚¬μš©λ¨

 μ™Έλž˜ ν‚€λ‘œ μ§€μ •λ˜λ©΄ μ°Έμ‘° ν…Œμ΄λΈ”μ˜ 기본킀에 μ—†λŠ” 값은 μž…λ ₯ν•  수 μ—†μŒ (μ°Έμ‘° 무결성 쑰건) 

μ™Έλž˜ν‚€


πŸ“Œ μ œμ•½μ‘°κ±΄

: λ°μ΄ν„°λ² μ΄μŠ€ λ°μ΄ν„°μ˜ 정확성을 μœ μ§€ν•˜κΈ° μœ„ν•œ λͺ©μ μœΌλ‘œ μ‚¬μš©ν•˜λ©° ν…Œμ΄λΈ”μ— μ €μž₯ν•  데이터λ₯Ό μ œμ•½ν•˜λŠ” νŠΉμˆ˜ν•œ κ·œμΉ™

μ œμ•½ 쑰건 μ’…λ₯˜
NOT NULL ν•΄λ‹Ή μ»¬λŸΌμ— λ°˜λ“œμ‹œ 값이 μž…λ ₯λ˜μ–΄μ•Όν•¨
UNIQUE μ»¬λŸΌμ— λ‹€λ₯Έ 행에 이미 μž…λ ₯된 값이 또 μž…λ ₯될 수 μ—†μŒ
PRIMARY KEY ν…Œμ΄λΈ”μ—μ„œ ν•œ 행을 λŒ€ν‘œν•˜λŠ” 데이터 κ°’
FOREIGN KEY λ‹€λ₯Έ ν…Œμ΄λΈ” μ»¬λŸΌμ— μ—†λŠ” 값은 μž…λ ₯ν•  수 μ—†μŒ
CHECK 쑰건을 μœ„λ°˜ν•˜λŠ” 데이터 μž…λ ₯ κΈˆμ§€

 


πŸ“Œ 데이터 νƒ€μž…

πŸ’‘ λ¬Έμžν˜• 데이터 νƒ€μž…

λ°μ΄ν„°νƒ€μž… μ„€λͺ…
CHAR(n) κ³ μ • 길이 문자, μ΅œλŒ€ 2000byte, default : 1byte
VARCHAR(n) κ°€λ³€ 길이 문자, μ΅œλŒ€ 4000byte, default : 1byte 
NCHAR(n) 고정길이 μœ λ‹ˆμ½”λ“œ 문자, μ΅œλŒ€ 2000byte, default : 1byte
NVARCHAR(n) 가변길이 μœ λ‹ˆμ½”λ“œ 문자, μ΅œλŒ€ 2000byte, default : 1byte
LONG μ΅œλŒ€ 2GB 크기의 가변길이 λ¬Έμžν˜•
CLOB λŒ€μš©λŸ‰ ν…μŠ€νŠΈ 데이터 νƒ€μž… (μ΅œλŒ€ 4GB)
NCLOB λŒ€μš©λŸ‰ ν…μŠ€νŠΈ μœ λ‹ˆμ½”λ“œ 데이터 νƒ€μž… (μ΅œλŒ€ 4GB)

πŸ’‘ μˆ«μžν˜• 데이터 νƒ€μž…

데이터 νƒ€μž… μ„€λͺ…
NUMBER (숫자 총 개수(P), μ†Œμˆ˜μ  μ΄ν•˜ 총 개수(S)) κ°€λ³€μˆ«μž
P : 1~38, λ””ν΄νŠΈ : 38, S : -84~127, λ””ν΄νŠΈ : 0 , μ΅œλŒ€ 22byte
FLOAT(P) NUMBER의 ν•˜μœ„νƒ€μž… P l 1~128, λ””ν΄νŠΈ : 128, μ΅œλŒ€ 22byte
BINARY_FLOAT 32λΉ„νŠΈ λΆ€λ™μ†Œμˆ˜μ  수 / μ΅œλŒ€ 4byte
BINARY_DOUBLE  64λΉ„νŠΈ λΆ€λ™μ†Œμˆ˜μ  수 / μ΅œλŒ€ 8byte

πŸ’‘ λ‚ μ§œ 데이터 νƒ€μž…

데이터 νƒ€μž… μ„€λͺ…
DATE BC 4712λ…„ 1μ›” 1일 ~ 9999λ…„ 12μ›” 31일 μ—°μ›”μΌμ‹œλΆ„μ΄ˆκΉŒμ§€ μž…λ ₯κ°€λŠ₯
TIMESTAMP μ—°μ›”μΌμ‹œλΆ„μ΄ˆ + λ°€λ¦¬μ΄ˆκΉŒμ§€ μž…λ ₯κ°€λŠ₯

πŸ’‘ LOB 데이터 νƒ€μž…

데이터 νƒ€μž… μ„€λͺ…
CLOB λ¬Έμžν˜• λŒ€μš©λŸ‰ 객체 고정길이와 가변길이 λ¬Έμžμ§‘ν•© 지원
NCLOB μœ λ‹ˆμ½”λ“œλ₯Ό μ§€μ›ν•˜λŠ” λ¬Έμžν˜• λŒ€μš©λŸ‰ 객체
BLOB μ΄μ§„ν˜• λŒ€μš©λŸ‰ 객체, 이미지, λ™μ˜μƒ, MP3
BFILE λŒ€μš©λŸ‰ 이진 νŒŒμΌμ— λŒ€ν•œ μœ„μΉ˜, 이름저μž₯

βœ… LOB (Large Object)

: 일반적으둜 λΉ„μ •ν˜• 데이터λ₯Ό μ €μž₯ν•  λ•Œ μ‚¬μš©ν•¨


πŸ“Œ COMMIT, ROLLBACK

πŸ’‘ COMMIT

: INSERT, UPDATE, DELETE λ“± μˆ˜ν–‰ν•œ λ‚΄μš©μ„ 데이터 λ² μ΄μŠ€μ— μ €μž₯ν•œλ‹€. 

COMMIT을 ν•˜μ§€ μ•ŠμœΌλ©΄ λ°μ΄ν„°λ² μ΄μŠ€μ— 반영이 λ˜μ§€ μ•ŠμŒ

COMMIT;

πŸ’‘ ROLLBACK

: λ§ˆμ§€λ§‰ COMMIT ν•œ μƒνƒœλ‘œ λ˜λŒλ¦°λ‹€.

ROLLBACK;

πŸ“Œ μ •κ·œν™”

: μ΄μƒν˜„μƒμ΄ μžˆλŠ” λ¦΄λ ˆμ΄μ…˜μ„ λΆ„ν•΄ν•˜μ—¬ μ΄μƒν˜„μƒμ„ μ—†μ• λŠ” κ³Όμ •

μ •κ·œν™” 단계

πŸ’‘ μž₯점

1. 데이터 베이슀 λ³€κ²½ μ‹œ 이상 ν˜„μƒμ„ μ œκ±°ν•  수 μžˆλ‹€

2. μ •κ·œν™”λœ λ°μ΄ν„°λ² μ΄μŠ€ κ΅¬μ‘°μ—μ„œλŠ” μƒˆλ‘œμš΄ 데이터 ν˜•μ˜ μΆ”κ°€λ‘œ μΈν•œ ν™•μž₯ μ‹œ, ꡬ쑰의 변경을 μ΅œμ†Œν™”ν•  수 μžˆλ‹€

3. λ°μ΄ν„°λ² μ΄μŠ€μ™€ μ—°λ™λœ μ‘μš© ν”„λ‘œκ·Έλž¨μ— μ΅œμ†Œν•œμ˜ 영ν–₯λ§Œμ„ 미치게 λ˜μ–΄ μ‘μš©ν”„λ‘œκ·Έλž¨μ˜ 생λͺ…을 μ—°μž₯μ‹œν‚¨λ‹€

 

πŸ’‘ 단점

1. λ¦΄λ ˆμ΄μ…˜μ˜ λΆ„ν•΄λ‘œ 인해 λ¦΄λ ˆμ΄μ…˜ κ°„μ˜ JOIN 연산이 λ§Žμ•„μ§„λ‹€

2. μ§ˆμ˜μ— λŒ€ν•œ 응닡 μ‹œκ°„μ΄ 느렀질 μˆ˜λ„ μžˆλ‹€. 

3. 데이터λ₯Ό μ²˜λ¦¬ν•  λ•Œ 속도가 빨라질 μˆ˜λ„ 있고, 느렀질 μˆ˜λ„ μžˆλ‹€.

4. λ§Œμ•½ 쑰인이 많이 λ°œμƒν•˜μ—¬ μ„±λŠ₯ μ €ν•˜κ°€ λ‚˜νƒ€λ‚˜λ©΄ 반 μ •κ·œν™”λ₯Ό μ μš©ν•  μˆ˜λ„ μžˆλ‹€.

λ°˜μ‘ν˜•