Home > DB > ๐Ÿ’พ[Database] Clustered Index๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

๐Ÿ’พ[Database] Clustered Index๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?
Database Native SQL Query MySQL

โ€œ๐Ÿ’พ[Database] Clustered Index๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?โ€

๐ŸŽ Intro.

  • Clusterd Index๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌ๋œ ๋ฐฉ์‹์œผ๋กœ ์ €์žฅ๋˜๋Š” ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค.
    • ์ด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธ๋ฑ์Šค๊ฐ€ ๊ณง ๋ฐ์ดํ„ฐ์ด๋ฉฐ, ์ธ๋ฑ์Šค๋ฅผ ์กฐํšŒํ•  ๋•Œ ๋ณ„๋„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

โœ…1๏ธโƒฃ Clustered Index์˜ ํŠน์ง•.

  • 1. ์ธ๋ฑ์Šค์™€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋™์ผ
    • ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”์˜ ํ–‰(ROW) ์ž์ฒด๋ฅผ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
      • ์ฆ‰, ์ธ๋ฑ์Šค์˜ ํ‚ค ๊ฐ’์ด ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์—๋Š” ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 2. ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์ €์žฅ
    • ๋ฐ์ดํ„ฐ๋Š” ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค์˜ ํ‚ค ๊ฐ’ ์ˆœ์„œ๋Œ€๋กœ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.
      • ์˜ˆ: PRIMARY KEY๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋œ ํ…Œ์ด๋ธ”.
  • 3. ๋น ๋ฅธ ๊ฒ€์ƒ‰
    • ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋ฒ”์œ„ ๊ฒ€์ƒ‰์ด๋‚˜ ์ •๋ ฌ ์ฟผ๋ฆฌ์—์„œ ์„ฑ๋Š ์ด ๋งค์šฐ ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค.
  • 4. ์‚ฝ์ž…/์‚ญ์ œ ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ์„ฑ
    • ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์‚ฝ์ž…/์‚ญ์ œ ์‹œ ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํŠนํžˆ ์ค‘๊ฐ„์— ์‚ฝ์ž…ํ•  ๊ฒฝ์šฐ).

โœ…2๏ธโƒฃ Clustered Index์˜ ์‹ค์ œ ์˜ˆ์ œ

1๏ธโƒฃ ์˜ˆ์ œ: PRIMARY KEY๋กœ ์ƒ์„ฑ๋œ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค.

  • MySQL์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ธฐ๋ณธ ํ‚ค(Primary Key)๋Š” ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
CREATE TABLE article (
    article_id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255),
    created_at DATETIME
);
  • ๊ฒฐ๊ณผ :
    • article_id๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
    • PRIMARY KEY๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ ์˜ˆ์ œ: UNIQUE๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค ์ƒ์„ฑ.

  • MySQL์—์„œ๋Š” ํŠน์ • ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
CREATE TABLE user (
    user_id INT AUTO_INCREMENT,
    username VARCHAR(255) UNIQUE,
    email VARCHAR(255),
    PRAIMARY KEY (user_id),
    UNIQUE KEY idx_username (username)
);
  • ๊ฒฐ๊ณผ:
    • PRIMARY KEY(user_id)๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • username์€ ์ •๋ ฌ๋˜์ง€ ์•Š๊ณ , ๋ณ„๋„์˜ ๋น„ํด๋Ÿฌ์Šคํ„ฐํ˜•(Non-Clustered) ์ธ๋ฑ์Šค๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

โœ…3๏ธโƒฃ Clustered Index์˜ ์žฅ์ .

  • 1. ๋น ๋ฅธ ๊ฒ€์ƒ‰:
    • ๋ฐ์ดํ„ฐ๊ฐ€ ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๋ฒ”์œ„ ๊ฒ€์ƒ‰(์˜ˆ: BETWEEN, ORDER BY)์—์„œ ๋น ๋ฅธ ์„ฑ๋Šฅ ์ œ๊ณต.
  • 2. ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์ตœ์†Œํ™”:
    • ์ธ๋ฑ์Šค๊ฐ€ ๊ณง ๋ฐ์ดํ„ฐ์ด๋ฏ€๋กœ, ๋ณ„๋„์˜ ํฌ์ธํ„ฐ๋ฅผ ๋”ฐ๋ผ๊ฐ€์ง€ ์•Š์•„๋„ ๋จ.
  • 3. ํšจ์œจ์ ์ธ ์ €์žฅ ๊ณต๊ฐ„:
    • ๋ฐ์ดํ„ฐ์™€ ์ธ๋ฑ์Šค๊ฐ€ ๊ฒฐํ•ฉ๋˜์–ด ๋ณ„๋„์˜ ์ธ๋ฑ์Šค ์ €์žฅ ๊ณต๊ฐ„์ด ํ•„์š” ์—†์Œ.

โœ…4๏ธโƒฃ Clustered Index์˜ ๋‹จ์ .

  • 1. ์‚ฝ์ž…/์‚ญ์ œ ์„ฑ๋Šฅ ์ €ํ•˜:
    • ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์ค‘๊ฐ„์— ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๊ฒฝ์šฐ ์ถ”๊ฐ€์ ์ธ ๋น„์šฉ ๋ฐœ์ƒ.
  • 2. ์—…๋ฐ์ดํŠธ ์„ฑ๋Šฅ ๋ฌธ์ œ:
    • ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋ฐ์ดํ„ฐ์˜ ๋ฌผ๋ฆฌ์  ์žฌ๋ฐฐ์—ด์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Œ.
  • 3. ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ ๊ฐ€๋Šฅ:
    • ํ•œ ํ…Œ์ด๋ธ”์— ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋งŒ ํ—ˆ์šฉ๋˜๋ฏ€๋กœ, ์—ฌ๋Ÿฌ ์ •๋ ฌ ๊ธฐ์ค€์ด ํ•„์š”ํ•˜๋ฉด ๋น„ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.

โœ…5๏ธโƒฃ Clustered Index๊ฐ€ ์ ํ•ฉํ•œ ๊ฒฝ์šฐ.

  • 1. ๋ฒ”์œ„ ๊ฒ€์ƒ‰์ด ๋นˆ๋ฒˆํ•œ ๊ฒฝ์šฐ:
    • ์˜ˆ์‹œ:
        SELECT *
        FROM orders
        WHERE order_date
        BETWEEN '2025-01-01' AND '2025-01-31';
      
  • 2. ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ:
    • ์˜ˆ์‹œ:
        SELECT *
        FROM article
        ORDER BY created_at DESC;
      
  • 3. ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ:
    • ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•  ๋•Œ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํšจ์œจ์ .

๐Ÿš€ ์ •๋ฆฌ.

  • Clustered Index๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์ €์žฅ๋˜๋Š” ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค.
  • ์žฅ์  : ๋ฒ”์œ„ ๊ฒ€์ƒ‰๊ณผ ์ •๋ ฌ ์ฟผ๋ฆฌ์—์„œ ๋งค์šฐ ํšจ์œจ์ .
  • ๋‹จ์  : ์‚ฝ์ž…/์‚ญ์ œ ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ, ํ•œ ํ…Œ์ด๋ธ”์—์„œ ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ ๊ฐ€๋Šฅ.
  • MySQL์—์„œ๋Š” PRIMARY KEY๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.