JiwonDev

์ •๋ฆฌ์ค‘ - 4

by JiwonDev

๋””์Šคํฌ์— ๋ฐ์ดํ„ฐ๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์ €๊ธฐ ๋‚˜๋‰˜์–ด ์ €์žฅ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ „๋ถ€ ์กฐ๊ฑด์„ ๊ฒ€์‚ฌํ•ด์„œ ๊ฐ€์ ธ์˜ค๋ฉด ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์ด ๋งค์šฐ ๊ตฌ๋ ค์ง‘๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์–ด๋‘๊ณ  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์น˜ ์ฑ… ๋’ค์˜ ์ƒ‰์ธ(index)์ฒ˜๋Ÿผ์š”.

 

๊ทธ๋Ÿผ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ indexingํ•˜๋ฉด ์„ฑ๋Šฅ์ด ๋ฏธ์นœ๋“ฏ์ด ์ข‹์•„์ง„๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณผ์—ฐ ๊ทธ๋Ÿด๊นŒ์š”? ์˜ˆ๋ฅผ ๋“ค์–ด๋ด…์‹œ๋‹ค. 600์žฅ ์งœ๋ฆฌ ์ฑ…์ธ๋ฐ ์ธ๋ฑ์Šค๊ฐ€ 300์žฅ ์ •๋„ ๋˜๊ณ  ๋ชจ๋“  ๋‹จ์–ด์˜ ์œ„์น˜๊ฐ€ ์ ํ˜€์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์„ธ์š”. ์ƒ‰์ธ์„ ํ•ด๋†“์€ ์˜๋ฏธ๊ฐ€ ์ „ํ˜€ ์—†์–ด์ง‘๋‹ˆ๋‹ค. ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ธ๋ฑ์‹ฑ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

* ์ฐธ๊ณ ๋กœ ์ธ๋ฑ์Šค๋„ ๊ฒฐ๊ตญ ๋””์Šคํฌ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. DBMS์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์€, ์ธ๋ฑ์Šค๋„ ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

ํ’€ ํ…Œ์ด๋ธ” ์Šค์บ”์€ ์ธ๋ฑ์Šค๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ํ•ด๋‹น ํ…Œ์ด๋ธ”์„ ๋””์Šคํฌ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ์ „๋ถ€ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

ํ’€ ์ธ๋ฑ์Šค ์Šค์บ”์€ ํ˜„์žฌ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ „๋ถ€ ์กฐํšŒํ•ด์„œ ์ฐพ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ (๋ฆฌํ”„ ๋…ธ๋“œ)๋Š” ๋””์Šคํฌ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๊ฐ€๋ฅดํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

# ์ธ๋ฑ์Šค์˜ ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„

์ธ๋ฑ์Šค๋Š” ์กฐํšŒ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ์˜ฌ๋ ค์ค๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฝ์ž…, ์ˆ˜์ •, ์‚ญ์ œ ์„ฑ๋Šฅ์€ ๋–จ์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ๋งˆ๋‹ค '์ธ๋ฑ์Šค'๋„ ํ•จ๊ป˜ ๋™๊ธฐํ™” ํ•ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  DB์—์„œ ์ธ๋ฑ์Šค๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฑด, ๋ณดํ†ต Insert, delete, update๋ณด๋‹ค ์กฐํšŒ Select๊ฐ€ ์••๋„์ ์œผ๋กœ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ B-Tree ์ธ๋ฑ์Šค์™€ ๋‹จ์ผ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ Hash ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

 

# InnoDB์˜ ์ธ๋ฑ์Šค ๊ตฌ์กฐ

InnoDB๋„ B-Tree๋ฅผ ๋ฒ ์ด์Šค๋กœ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋งŒ InnoDB๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์ €์žฅํ•  ๋•Œ, ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค๋ฅผ ์ธ๋ฑ์Šค๋กœ ์ •๋ ฌํ•˜์—ฌ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰ PK ์ž์ฒด๊ฐ€ ์ฃผ์†Œ ์—ญํ• ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Range Scan์ด ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค.

 

MySQL์—์„œ๋Š” PK์™€ Secondary Key Index (PK๋ฅผ ์ œ์™ธํ•œ ํ‚ค)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

# B-Tree ๊ธฐ๋ฐ˜ ์ธ๋ฑ์Šค ์‚ฌ์šฉ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์š”์†Œ

  • ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์˜ ํฌ๊ธฐ (InnoDB ๊ธฐ๋ณธ๊ฐ’ 16KB)
    ์ „์ฒด์ ์ธ ์ธ๋ฑ์Šค์˜ ํฌ๊ธฐ๊ฐ€ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋„ˆ๋ฌด ์ปค์„œ ํ•œ ํŽ˜์ด์ง€์— ๋‹ด์„ ์ˆ˜ ์—†๋‹ค๋ฉด, 2๋ฒˆ ์ฝ์–ด์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • B-Tree์˜ ๊นŠ์ด
    ์ฐพ๋Š” ๋‹จ๊ณ„๊ฐ€ ๋งŽ์•„์ ธ์„œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    ๊ธธ์ด๋ฅผ ์ง์ ‘์ ์œผ๋กœ ์กฐ์ ˆํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋Œ€์šฉ๋Ÿ‰์ด๋ผ ๊นŠ์ด๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค๋ฉด ์ธ๋ฑ์Šค์˜ ํ‚ค ๊ฐ’ ํฌ๊ธฐ๋ฅผ ์ค„์—ฌ์„œ ๊นŠ์ด๋ฅผ ์ตœ๋Œ€ํ•œ ์–•๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • Selectivity(์„ ํƒ๋„)
    ์ธ๋ฑ์Šค๋กœ ์ •ํ•œ ํ‚ค๊ฐ’์ด ์–ผ๋งˆ๋‚˜ ๊ณจ๊ณ ๋ฃจ ํผ์ ธ์žˆ๋Š”๊ฐ€ (๊ณ ์œ ํ•œ๊ฐ€)์— ๋Œ€ํ•œ ์ฒ™๋„์ž…๋‹ˆ๋‹ค.
    Hash Function์ฒ˜๋Ÿผ ๊ณจ๊ณ ๋ฃจ ํผ์ ธ์žˆ์–ด์•ผ ์“ธ๋ชจ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์ง€ ์•Š์•„ ์„ฑ๋Šฅ์˜ ํ–ฅ์ƒ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝ์–ด์•ผ ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ ์ˆ˜
    ํŠธ๋ฆฌ์˜ ๊นŠ์ด๋ž‘ ๊ฐ™์€ ๋‚ด์šฉ์ด ์•„๋‹Œ๊ฐ€ ์‹ถ์ง€๋งŒ, ์ด๋Š” '๊ผญ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€?'์— ๋Œ€ํ•œ ์ฒ™๋„์ž…๋‹ˆ๋‹ค.
    B-Tree ํŠน์„ฑ์ƒ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์กฐ๊ฑด 1๋ฒˆ ์ด์ƒ์˜ ์ฝ๊ธฐ๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
    ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ์ˆ˜๊ฐ€ 100๋งŒ๊ฐœ์ธ๋ฐ, 60๋งŒ๊ฐœ๋ฅผ ์ฝ๋Š” ์ž‘์—…์ด๋ผ๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š๋Š”๊ฒŒ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค.
    ํ†ต๊ณ„์ ์ธ ์ˆ˜์น˜๋กœ 20% ๋ฏธ๋งŒ์ผ ๋•Œ์—๋Š” ๊ทธ๋ƒฅ ์ฝ๋Š”๊ฒŒ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์ตœ์ ํ™” ํ•ด์ค๋‹ˆ๋‹ค.

  • ์œ ๋‹ˆํฌ ์†์„ฑ
    ์ฐพ๋Š” ์†์„ฑ๊ฐ’์ด ๊ณ ์œ ํ•œ๊ฐ€๋Š” ๋งค์šฐ ์ค‘์š”ํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
    ๋”ฑ 1๊ฐœ๋งŒ ์กด์žฌํ•œ๋‹ค๋Š” ๋ณด์žฅ์ด ์žˆ๋‹ค๋ฉด, ํ•˜๋‚˜๋ฅผ ์ฐพ์œผ๋ฉด ๋ฐ”๋กœ ๋™์ž‘์„ ๋ฉˆ์ถ”๋ฉด ๋ฉ๋‹ˆ๋‹ค.
    ํ•˜์ง€๋งŒ ๊ทธ๋Ÿฐ ๋ณด์žฅ์ด ์—†๋‹ค๋ฉด ์ตœ์ ํ™”ํ•  ์ˆ˜ ์—†๊ณ  ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ๋‹ค ๋’ค์ ธ์•ผ๊ฒ ์ฃ .

 

# ์ธ๋ฑ์Šค ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๋ถ„๋ฅ˜

  • ์ธ๋ฑ์Šค Range Scan
    ์ „์ฒด๋ฅผ ์ฝ์ง€ ์•Š๊ณ  ์ธ๋ฑ์Šค์—์„œ ํ•ด๋‹น ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜๋Š” ์ผ๋ถ€๋งŒ ์ฝ์–ด์„œ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
    ํ”ํžˆ ์ธ๋ฑ์Šค๋ฅผ ํƒ€์„œ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์—ˆ๋‹ค๋Š”๊ฑด ์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ”์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    SELECT * FROM employees WHERE first_name BETWEEN 'A' AND 'C';
  • ์ธ๋ฑ์Šค Full Scan
    ์ธ๋ฑ์Šค๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋‹ค ์ฝ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ํšจ์œจ์ ์ด์ง€ ์•Š์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, Index Full Scan์ด๋ผ๊ณ  ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • Loose Index Scan
    ๋ ˆ์ธ์ง€ ์Šค์บ”์ฒ˜๋Ÿผ ์ผ๋ถ€๋งŒ ์ฝ๋Š”๋ฐ, ํ•œ๋ฒˆ์— ์ญ‰ ์ฝ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์ค‘๊ฐ„ ๊ฐ’์„ ๋›ฐ์–ด๋„˜๊ณ  ๋“ฌ์„ฑ ๋“ฌ์„ฑ ์ฝ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

  • Index Skip Scan
    ํŠน์ • ์กฐ๊ฑด์—์„œ ๋™์ž‘ํ•˜๋Š” ์Šค์บ” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์˜ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค.
    SELECT gender, birth_date FROM employees WHERE birth_date >= '1996-01-01';
    ์„ฑ๋ณ„์€ [๋‚จ, ์—ฌ] 2๊ฐ€์ง€ ๊ฐ’ ๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ (gender, birth_date)๋กœ ์ธ๋ฑ์Šค๊ฐ€ ์žกํ˜€์žˆ๋‹ค๋ฉด ์ธ๋ฑ์Šค์˜ ์ด์ ์„ ์ด์šฉํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ˆœ์„œ์ƒ ์„ฑ๋ณ„์ด ์•ž์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

    ์ด ๋•Œ Index Skip Scan์„ ํ™œ์„ฑํ™” ๋˜์–ด์žˆ๋‹ค๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์ ํ™” ํ•ด์ค๋‹ˆ๋‹ค.
    ์•ž์˜ ๊ฐ’(gender)์˜ ๋ฒ”์œ„๊ฐ€ ์ž‘๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์„ ๋•Œ MySQL์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‘ ์ฟผ๋ฆฌ๋กœ ๋งŒ๋“ค์–ด์„œ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.
    ... WHERE gender='๋‚จ' and birth_date >= '1996-01-01'
    ... WHERE gender='์—ฌ' and birth_date >= '1996-01-01'
    ์ด๋ ‡๊ฒŒ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ฟผ๋ฆฌ๋ฅผ ์ชผ๊ฐœ๊ณ , ์ด๋ฅผ ํ•ฉ์ณ์„œ ๋” ๋น ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค๋„๋ก ์ตœ์ ํ™” ํ•ด์ค๋‹ˆ๋‹ค.

    * ๋˜๋Š” ์ฟผ๋ฆฌ์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ์ธ๋ฑ์Šค์— ํ‘œ์‹œ๋˜์–ด ์žˆ์–ด ๊ตณ์ด ๋””์Šคํฌ์—์„œ ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ(์ปค๋ฒ„๋ง ์ธ๋ฑ์Šค) Index Skip Scan ์ตœ์ ํ™”๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

    * ๋‹ค๋งŒ ์ด ๊ฒฝ์šฐ๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š”๊ฒŒ ๋” ๋‚ซ์Šต๋‹ˆ๋‹ค. ํ‚ค ๊ฐ’์˜ ๋ฒ”์œ„ (์„ ํƒ๋„)๊ฐ€ ๋†’์ง€ ์•Š๋‹ค๋Š” ๊ฑธ ์•Œ๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์—. gender๊ฐ€ 2๊ฐœ๋ผ๊ณ ํ•ด์„œ ๋ฐ˜๋“œ์‹œ Skip Scan์ด ๋™์ž‘ํ• ๊ฑฐ๋ผ๊ณ  ๋ณด์žฅํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

#  Multi Column Index (๋˜๋Š” ๋‹ค์ค‘ ๋ณตํ•ฉ ์ธ๋ฑ์Šค)

์œ„์˜ Index Skip Scan์˜ ์˜ˆ์ œ์—์„œ๋„ ๋ณด์•˜์ง€๋งŒ, ์ธ๋ฑ์Šค ์ปฌ๋Ÿผ์ด ์—ฌ๋Ÿฌ๊ฐœ์ธ ๊ฒฝ์šฐ ์•ž์„  ์ปฌ๋Ÿผ์— ์˜์กดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์‹ค์ œ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ ์ธ๋ฑ์Šค ์„ค๊ณ„์™€ ์ธ๋ฑ์Šค ์ˆœ์„œ๋Š” ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

 

@ ์ •๋ ฌ ๋ฐฉํ–ฅ

์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๊ธฐ์กด์—๋Š” ์ •๋ ฌ๋ฐฉํ–ฅ ์ง€์ •์ด ๋ถˆ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ, MySQL8.0 ๋ถ€ํ„ฐ๋Š” ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ง€์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•œ 5.X ๋Œ€ ๋ฒ„์ „์ด๋ผ๋ฉด, ์ฟผ๋ฆฌ์— ์ •๋ ฌ ๋ฐฉํ–ฅ์„ ์„ž์–ด์„œ ์“ฐ๋ฉด ์ธ๋ฑ์Šค๋ฅผ ํƒ€์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ๋งŒ ๊ธฐ์–ตํ•ด์ฃผ์„ธ์š”.

SELECT * FROM dept_emp WHERE dept_no='d001' AND emp_no >= 1000; -- ์‚ฌ์šฉํ•˜๋Š” ์ฟผ๋ฆฌ

1. (dept_no, emp_no) -- ์ธ๋ฑ์Šค 1
2. (emp_no, dept_no) -- ์ธ๋ฑ์Šค 2

๋‹จ์ˆœํ•œ Select ๋ฌธ์— ์œ„์˜ 2๊ฐ€์ง€ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. ๋ณด์‹œ๋‹ค์‹ถ์ด ๊ทธ๋ƒฅ ์ˆœ์„œ๋งŒ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

 

1๋ฒˆ์˜ ๊ฒฝ์šฐ dept_no ์ˆœ์„œ๋กœ ์ธ๋ฑ์Šค๊ฐ€ ์ •๋ ฌ๋˜์–ด์žˆ์–ด์„œ d001์„ ์ฐพ๊ณ  ๊ทธ๋ƒฅ ์ญ‰ ์ฝ์–ด๋ฒ„๋ฆฌ๋ฉด ๋๋‚ฉ๋‹ˆ๋‹ค.

2๋ฒˆ์˜ ๊ฒฝ์šฐ emp_no ์ˆœ์„œ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋จผ์ € emp_no>=1000 ์กฐ๊ฑด์„ ์ฐพ๊ณ , dept_no๊ฐ€ d001์ด ๋งž๋Š”์ง€ ์ผ์ผ์ด ๋น„๊ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

# ์ธ๋ฑ์Šค๋ฅผ ํƒ€์ง€ ๋ชปํ•˜๋Š” ์กฐ๊ฑด

  • NOT-EQUAL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ( NOT IN, NOT BETWEEN, IS NOT NULL )
    ์ธ๋ฑ์Šค ๊ตฌ์กฐ์˜ ํŠน์„ฑ์ƒ, ๋ถ€์ •ํ˜•์€ ์–ด์ฉ” ์ˆ˜ ์—†์ด ๋ฒ”์œ„๋ฅผ ์ขํžˆ๋Š” ์‹์œผ๋กœ ์ผ์ผ์ด ๋น„๊ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค ๋ถˆ๊ฐ€๋Šฅ.
  • LIKE ๋’ท๋ถ€๋ถ„ ์ผ์น˜
    B-TREE ์ธ๋ฑ์Šค๋Š” ์•ž์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋’ท๋ถ€๋ถ„ ์ผ์น˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ’€์Šค์บ”ใ„ฑ

  • ์Šคํ† ์–ด๋“œ ํ•จ์ˆ˜๋‚˜ ์—ฐ์‚ฐ์ž๋กœ ์นผ๋Ÿผ์ด ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ
    ์นผ๋Ÿผ์ด ๋ณ€ํ˜•๋˜๋ฉด ์ธ๋ฑ์Šค์— ์ ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์นผ๋Ÿผ ๋น„๊ต์กฐ๊ฑด์— Not-Deterministic ์Šคํ† ์–ด๋“œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ, ๋งค๋ฒˆ ํ˜ธ์ถœํ•ด์•ผํ•ด์„œ ์ธ๋ฑ์Šค ๋ถˆ๊ฐ€.
  • ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ (์ธ๋ฑ์Šค ์นผ๋Ÿผ ํƒ€์ž…์„ ๋ณ€ํ™˜ํ•ด์•ผ ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ)
    ์ด ์—ญ์‹œ๋„ ๋งค๋ฒˆ ๋ณ€ํ™˜์„ ํ•ด์•ผํ•˜๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ
    ๋ฌธ์ž์—ด์ด๋ผ๊ณ  ๋‹ค ๋˜‘๊ฐ™์ด ๋  ๊ฑฐ๊ฐ™์ง€๋งŒ, ์ด ์—ญ์‹œ๋„ ๋ฌธ์ž ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์ด ๊ฐ™์€์ง€ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
    ๋‹น์—ฐํžˆ 'UTF8'๊ณผ 'euc-kr'์„ ๋น„๊ตํ•˜๋ฉด ์ธ๋ฑ์Šค๋ฅผ ํƒ€์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋ณ€ํ™˜ํ•ด์•ผํ•˜๋‹ˆ๊นŒ์š”.

'๐ŸŒฑBackend > DB(MySQL,PostgreSQL)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ •๋ฆฌ์ค‘-6  (0) 2021.10.27
์ •๋ฆฌ์ค‘-5  (0) 2021.10.27
์ •๋ฆฌ์ค‘ - 3  (0) 2021.10.20
์ •๋ฆฌ์ค‘ -2  (0) 2021.10.20
์ •๋ฆฌ์ค‘ #1 ์—”์ง„ ์•„ํ‚คํ…์ฒ˜  (0) 2021.10.13

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

JiwonDev

JiwonDev

ํ™œ๋™ํ•˜๊ธฐ