Search
Duplicate
⌨️

인덱슀

β€’
컬럼의 κ°’κ³Ό λ ˆμ½”λ“œκ°€ μ €μž₯된 μ£Όμ†Œλ₯Ό μ΄μš©ν•˜μ—¬ 킀와 λ°Έλ₯˜λ₯Ό λ§Œλ“¦
β€’
InnoDBλŠ” B-Tree ꡬ쑰 이용
β€’
B-Tree κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€.
β€’
ν•˜λ‚˜μ˜ λ…Έλ“œμ— μ—”μ €?ν‚€κ°€ μ‘΄μž¬ν•˜κ³  트리 ν˜•νƒœλ₯Ό 가지고 κ· ν˜•μ„ μœ μ§€ν•˜κ³  μˆœμ„œλ₯Ό 보μž₯ν•œλ‹€.
β€’
λ””μŠ€ν¬μ—μ„œ μ½μ–΄μ˜€λ©΄ λŠλ¦¬λ‹ˆκΉŒ μ„±λŠ₯ μƒμ˜ 이점을 노리기 μœ„ν•΄ μ‚¬μš© κ·Έ 말은 인덱슀λ₯Ό μˆ˜μ •μ„ ν•  λ•Œμ—λ„ μ„±λŠ₯을 μ˜¬λ €μ•Ό ν•˜λ‹ˆκΉŒ 인덱슀의 변경이 λ°œμƒν•  λ•Œλ§ˆλ‹€ νŒŒμΌμ— μ ‘κ·Όν•˜λ©΄ μ„±λŠ₯ μ €ν•˜κ°€ λœλ‹€. 이λ₯Ό μœ„ν•΄ μ„±λŠ₯ κ°œμ„ μ΄ 된 ꡬ쑰λ₯Ό μ‚¬μš©
β€’
balanced tree 의 일쒅
β€’
각 λ…Έλ“œλŠ” μ΅œλŒ€ N개의 ν‚€λ₯Ό 가진닀.
β€’
νŽ˜μ΄μ§€ 기반 자료 ꡬ쑰
β—¦
λ””μŠ€ν¬μ—μ„œ μ½μ–΄μ˜€λŠ” λ‹¨μœ„, 블둝 λ‹¨μœ„
β—¦
λ…Έλ“œλž‘ νŽ˜μ΄μ§€λ₯Ό 같은 의미둜 μ‚¬μš©
β€’
TFGκ°€ 터지면,,?
β—¦
ν•œ νŽ˜μ΄μ§€μ— 담을 수 μžˆλŠ” κ°œμˆ˜κ°€ μ μ–΄μ§ˆκ±°κ³  μƒˆλ‘œμš΄ λ…Έλ“œλ„ λ§Œγ…Žμ΄ λ§Œλ“€μ–΄μ•Ό ν• κ±°κ³  인덱슀 관리λ₯Ό μœ„ν•œ λ©”λͺ¨λ¦¬κ°€ λ§Žμ•„μ§„λ‹€.
β—¦
ν‚€κ°€ λ„ˆλ¬΄ 큰 데이터λ₯Ό μ‚¬μš©ν•΄λ„ μΈλ±μŠ€μ—λŠ” μ„±λŠ₯ μƒμ˜ μ €ν•˜κ°€ λ°œμƒν•  수 μžˆλ‹€.
β€’
μΈλ±μŠ€λŠ” logN
β€’
Inno DB μ—μ„œλŠ” ν΄λŸ¬μŠ€ν„°λ“œ 인덱슀, PK λ₯Ό ν‚€κ°’μœΌλ‘œ 주둜 μ‚¬μš©
β—¦
데이터 파일둜 λ°”λ‘œ μ ‘κ·Όν•  수 μžˆλŠ” μ£Όμ†Œλ₯Ό 가지고 있음
β€’
ν΄λŸ¬μŠ€ν„°λ“œ μΈλ±μŠ€κ°€ μ•„λ‹Œ 킀듀은 PK λ₯Ό 가지고 있음 κ·Έλž˜μ„œ μ‹œκ°„μ΄ 2λ°°
β€’
hash 보닀 b-tree λ₯Ό μ‚¬μš©ν•˜λŠ” 이유
β—¦
ν•΄μ‹œ 좩돌 κ°€λŠ₯μ„±
β—¦
μˆœμ„œλ₯Ό 보μž₯
β—¦
λΈ”λŸ­ λ‹¨μœ„λ‘œ μ €μž₯이 κ°€λŠ₯ν•˜λ‹€
β—¦
λ²”μœ„ 검색이 κ°€λŠ₯
β—¦
LIKE 검색이 κ°€λŠ₯
β—¦
μ •λ ¬ 쉬움

primary vs secondary

β€’
pk 와 pk μ™Έμ˜ λͺ¨λ“  ν‚€
β€’
mysql 은 λͺ¨λ“  킀에 λŒ€ν•΄ index λ₯Ό λ§Œλ“ λ‹€.
β€’
key λŠ” 둜우λ₯Ό μ‹λ³„ν•˜κΈ° μœ„ν•œ κ°’, index λŠ” ν…Œμ΄λΈ” μ ‘κ·Ό 속도λ₯Ό 높이기 μœ„ν•œ 자료 ꡬ쑰

unique vs non-unique

clustered index

β€’
데이터λ₯Ό μ €μž₯ν•  λ•Œ μ–΄λ–€ μˆœμ„œλ‘œ μ €μž₯ν•˜λŠ”μ§€
β€’
Inno DB 의 경우 1. primary key, 2. unique & not null column, 3. λ‚΄λΆ€μ μœΌλ‘œ μƒμ„±ν•œ GEN_CLUST_INDEX(6byte)
β€’
ν΄λŸ¬μŠ€ν„°λ“œ μΈλ±μŠ€κ°€ μ„€μ •λœ μˆœμ„œλŒ€λ‘œ μ €μž₯이 λœλ‹€! PK κ°€ ν΄λŸ¬μŠ€ν„°λ“œ 인덱슀일 μ‹œ, λ‚˜μ€‘μ— μ €μž₯λ˜μ–΄λ„ pk 값이 먼저라면 μ•žμ— μ €μž₯λœλ‹€.

composite index

μ—¬λŸ¬ 개λ₯Ό λ¬Άμ–΄μ„œ 인덱슀둜 λ§Œλ“¦

인덱슀 ν•œλ²ˆ 더 생각해보기

β€’
νŠΈλ ˆμ΄λ“œ μ˜€ν”„
β—¦
λ°μ΄ν„°μ˜ μˆ˜μ •μ΄ λΉˆλ²ˆν•˜λ‹€λ©΄ 인덱슀의 μˆ˜μ •λ„ λΉˆλ²ˆν•΄μ§„λ‹€(CUD).

인덱슀 μ„€μ • κΈ°μ€€

β€’
cardinality
β—¦
값이 μ–Όλ§ˆλ‚˜ λ‹€μ–‘ν•˜κ²Œ μ €μž₯λ˜μ–΄μžˆλŠ”μ§€(μ–Όλ§ˆλ‚˜ unique ν•œμ§€)
β€’
μ„œλΉ„μŠ€μ—μ„œ μ‚¬μš©ν•˜λŠ” 쿼리
β—¦
μ›¬λ§Œν•˜λ©΄ 인덱슀 타라
β—¦
데이터가 λ§Žμ€ ν…Œμ΄λΈ”μΌ λ•Œ!

인덱슀λ₯Ό μ‚¬μš©ν•  수 없을 λ•Œ

β€’
<>, NOT IN, NOT BETWEEN, IS NOT NULL
β—¦
μΈλ±μŠ€λŠ” νŠΉμ • 데이터와 μΌμΉ˜ν•˜λŠ” 것을 찾을 λ•Œ λΉ λ₯Έλ° μΈλ±μŠ€λŠ” λ””μŠ€ν¬ 랜덀 IO κ°€ λ°œμƒ
β—¦
ν΄λŸ¬μŠ€ν„°λ“œ 인덱슀λ₯Ό 따라 순차적으둜 λ””μŠ€ν¬μ— μ ‘κ·Ό
β—¦
DB κ°€ κ·Έλƒ₯ μˆœμ„œλŒ€λ‘œ μ ‘κ·Όν•˜λŠ”κ²Œ λΉ λ₯΄κ² λ‹€ μ‹Άμ–΄μ„œ μˆœμ„œλŒ€λ‘œ 접근함 인덱슀 λŒ€μ‹ 
β—¦
쒋은 μ˜ˆμ‹œ
1
banana
2
apple
3
grapefruit
4
watermelon
5
melon
β—¦
μœ„μ˜ 경우 name 에 ν΄λŸ¬μŠ€ν„°λ“œ μΈλ±μŠ€κ°€ κ±Έλ € μžˆμ„ λ•Œ 인덱슀λ₯Ό 타면 2, 1, 3, 5, 4 의 μˆœμ„œλ‘œ λ””μŠ€ν¬μ— μ ‘κ·Όν•œλ‹€!
β€’
LIKE β€˜%??’
β—¦
b-tree λΌμ„œ 인덱슀λ₯Ό 타지 μ•ŠλŠ”λ‹€.
β€’
where char_index = 10;
β—¦
νƒ€μž… 가곡할 λ•Œ 10이 될 수 μžˆλŠ”κ²Œ λ„ˆλ¬΄ λ§Žλ‹€. β€˜10’, β€˜ 10’, β€˜0010’ λ“±λ“±

explain

β€’
key 컬럼
β—¦
μ‹€μ œλ‘œ 쿼리가 싀행될 λ•Œ μ‚¬μš©ν•œ key
β€’
type 컬럼
β—¦
index λ₯Ό νƒ”λŠ”μ§€, ν’€ ν…Œμ΄λΈ” μŠ€μΊ”μΈμ§€
β—¦
to_date > β€˜β€™ κ°€ all νƒ€λŠ” 이유 β†’ index 둜 읽을 데이터가 λ„˜ λ§Žμ•„μ„œ 걍 ν…Œμ΄λΈ”μ„ 읽음
β—¦
PK 둜 range 읽을 λ•Œμ—λŠ” 데이터가 λ§Žμ•„λ„ κ·ΈλŒ€λ‘œ range 둜 읽음.
β—¦
PK λŠ” κ·Έλƒ₯ disk 에 μˆœμ„œλŒ€λ‘œ μ €μž₯이 λ˜κΈ°λ•Œλ¬Έμ—!