우규이인우윀
Eager To Learn 🌌
우규이인우윀
전체 방문자
였늘
μ–΄μ œ

λΈ”λ‘œκ·Έ 메뉴

  • 🏑 ν™ˆ
  • πŸš€ κΉƒν—ˆλΈŒ
  • β›… νƒœκ·Έ ν΄λΌμš°λ“œ
  • λΆ„λ₯˜ 전체보기 (217)
    • πŸ‘¨πŸ»‍πŸ’» PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm 기법 (1)
      • 바킹독 (21)
    • λΈ”λ‘œκ·Έ 이사 (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • 자료ꡬ쑰 (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • κ°œλ°œμ„œμ  (15)
      • 가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초 (1)
      • 였브젝트 - 쑰영호 (7)
      • μΉœμ ˆν•œ SQL νŠœλ‹ (7)
    • 회고 (2)
hELLO Β· Designed By μ •μƒμš°.
우규이인우윀

Eager To Learn 🌌

κ°œλ°œμ„œμ /μΉœμ ˆν•œ SQL νŠœλ‹

Where 쑰건 μ ˆμ—μ„œ Between κ³Ό in 의 차이

2023. 10. 18. 21:49

μ‘°μ‹œν˜•λ‹˜μ˜ μΉœμ ˆν•œ SQL νŠœλ‹μ„ 읽고 개인적으둜 κ³΅λΆ€ν•œ λ‚΄μš©μ„ μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€.


Between κ³Ό In 쑰건절의 인덱슀 μŠ€μΊ” λ²”μœ„ 비ꡐ해보기

 

μœ„μ™€ 같이, DEPTNO 와 JOB 으둜 인덱슀λ₯Ό κ΅¬μ„±ν–ˆλ‹€κ³  κ°€μ •ν•΄λ³΄μž.

 

SELECT
	*
FROM
	TABLE
WHERE
	DEPTNO BETWEEN 10 AND 30
AND
	JOB = 'B'

μœ„μ™€ 같은 쿼리가 μ‹€ν–‰λ˜λ©΄ μ–΄λ–»κ²Œ 될까?

 

 

λ¨Όμ €, DEPTNOκ°€ 10μ΄λ©΄μ„œ JOB이 'B' 인 λ ˆμ½”λ“œμ—μ„œ 탐색을 μ‹œμž‘ν•˜μ—¬

 

DEPTNO κ°€ 30μ΄λ©΄μ„œ JOB이 'B'κ°€ μ•„λ‹ˆκ²Œ λ˜λŠ” λ ˆμ½”λ“œ κΉŒμ§€ 탐색할 것이닀.

 

수직적 탐색은 ν•œλ²ˆ μ΄λ£¨μ–΄μ§€μ§€λ§Œ, μˆ˜ν‰μ  탐색이 λ§Žμ€ λ ˆμ½”λ“œλ₯Ό νƒμƒ‰ν•˜κ²Œλœλ‹€.

 

λ°˜λ©΄μ—,

 

SELECT
	*
FROM
	TABLE
WHERE
	DEPTNO IN (10,20,30)
AND
	JOB = 'B'

 

❓ μœ„μ™€ 같은 쿼리λ₯Ό μž‘μ„±ν•˜λ©΄ μ–΄λ–»κ²Œ 될까?

 

πŸ’‘ IN 쑰건을 μ‚¬μš©ν•˜λ©΄ μ˜΅ν‹°λ§ˆμ΄μ €λŠ” 쿼리λ₯Ό μ—¬λŸ¬κ°œλ‘œ λΆ„λ¦¬ν•œ λ’€, UNION ν•˜μ—¬ μ‹€ν–‰μ‹œν‚¨λ‹€κ³  ν•˜μ˜€λ‹€.

 

μ™œλƒν•˜λ©΄, OR 둜 μ—°κ²°λ˜μ–΄ μžˆλŠ” 경우 인덱슀 μŠ€μΊ” μ‹œμž‘μ μ„ 찾을 수 μ—†μœΌλ―€λ‘œ 인덱슀 μŠ€μΊ”μ΄ λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

 

λ”°λΌμ„œ,

 

SELECT * FROM TABLE WHERE DEPTNO = 10 AND JOB = 'B'
UNION ALL
SELECT * FROM TABLE WHERE DEPTNO = 20 AND JOB = 'B'
UNION ALL
SELECT * FROM TABLE WHERE DEPTNO = 30 AND JOB = 'B'

 

μœ„μ™€ 같은 쿼리λ₯Ό μ²˜λ¦¬ν•˜λ“―μ΄, μ‹€ν–‰κ³„νšμ„ μ„Έμš΄λ‹€.

 

λ”°λΌμ„œ, μŠ€μΊ” λ²”μœ„λŠ”

 

μœ„μ™€ 같이 μ²˜λ¦¬ν•˜κ²Œ λ˜μ–΄, 인덱슀 μŠ€μΊ” νš¨μœ¨μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆκ²Œλœλ‹€.

 

λ”°λΌμ„œ, μ“Έλͺ¨μ—†λŠ” λ ˆμ½”λ“œλ₯Ό μ½λŠ” λΉ„νš¨μœ¨μ„ ν”Όν•  수 μžˆκ²Œλœλ‹€.

 

❓ κ·Έλ ‡λ‹€λ©΄, BETWEEN 을 IN 쑰건으둜 λ°”κΎΈλ©΄ 항상 효율적일까?

🚨 κ·Έλ ‡μ§€ μ•Šλ‹€.

λ§Œμ•½, IN 에 λ“€μ–΄κ°€λŠ” νŒŒλΌλ―Έν„°κ°€ λ„ˆλ¬΄ λ§Žμ•„μ§€λ©΄, 수직적 탐색이 λ”μš± λ§Žμ•„μ§„λ‹€.

 

λ”°λΌμ„œ, 쑰건을 λ§Œμ‘±ν•˜λŠ” λ ˆμ½”λ“œκ°€ μ„œλ‘œ 많이 λ–¨μ–΄μ Έ μžˆλŠ” κ²½μš°λŠ”

 

쀑간에 ν•„μš”μ—†λŠ” λ ˆμ½”λ“œλ“€μ„ μƒλž΅ν•˜κ³  수직적 νƒμƒ‰μœΌλ‘œ μ΄λ™ν•˜λŠ”κ²Œ νš¨μœ¨μ μ΄μ§€λ§Œ

 

두 λ ˆμ½”λ“œ κ°„ 사이가 가깝닀면, IN 방법이 더 λΉ„νš¨μœ¨μ μΌ 수 μžˆλ‹€.

 

πŸ’‘ λ”°λΌμ„œ, 데이터 λΆ„ν¬λ‚˜ 수직적 탐색 λΉ„μš©μ„ 따져보고 κ²°μ •ν•΄μ•Όν•œλ‹€.

 

✍🏻 in μ‘°κ±΄μ ˆμ„ μ‚¬μš©ν•˜λŠ”λ° μΈλ±μŠ€κ°€ μ—¬λŸ¬κ°œμ΄κ³ , μ›ν•˜λŠ” μΈλ±μŠ€κΉŒμ§€ μ—‘μ„ΈμŠ€ 쑰건으둜 μ‚¬μš©ν•˜κ³  싢은 경우 인덱슀 힌트λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.

num_index_keys ( table index num ) : num번째 μΈλ±μŠ€κΉŒμ§€ 인덱슀 μ—‘μ„ΈμŠ€ 쑰건으둜 μ‚¬μš©ν•œλ‹€.

κ·Έ 이후, μΈλ±μŠ€λŠ” ν•„ν„° 쑰건으둜 μ‚¬μš©λ˜κ²Œλœλ‹€.

πŸ’‘ 즉, 인덱슀 μ—‘μ„ΈμŠ€ 쑰건으둜 μ‚¬μš©λ˜λŠ” μΈλ±μŠ€λŠ” 수직적 탐색을 ν•œλ‹€λŠ” μ˜λ―Έμ΄λ‹€.

λ”°λΌμ„œ, in μ‘°κ±΄μ ˆμ„ μ‚¬μš©ν•  λ•Œ,

in 에 μ΄μš©λ˜λŠ” νŒŒλΌλ―Έν„° 비ꡐ λŒ€μƒμ΄ λ§Žκ±°λ‚˜ 선두 인덱슀 κ°„ 거리가 크지 μ•Šμ„ λ•Œμ—λŠ”

ν•„ν„° 쑰건으둜 μˆ˜ν‰ νƒμƒ‰ν•˜λŠ”κ²Œ νš¨μœ¨μ μ΄λ―€λ‘œ 인덱슀 μ—‘μ„ΈμŠ€ 쑰건에 μ œν•œμ„ λ‘λŠ” 것이 효율적일 수 μžˆλ‹€.

 

    'κ°œλ°œμ„œμ /μΉœμ ˆν•œ SQL νŠœλ‹' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • NL 쑰인의 원리
    • Where 쑰건 μ ˆμ—μ„œ Between κ³Ό Like
    • 배치 I/O와 인덱슀λ₯Ό λ―Ώκ³  쿼리에 ORDER BYλ₯Ό μƒλž΅ν•˜λ©΄ μ•ˆλ˜λŠ” 이유
    • 인덱슀 νŠœλ‹
    우규이인우윀
    우규이인우윀
    개발자 κΏˆλ‚˜λ¬΄

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”