ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • mysql์˜ ์ธ๋ฑ์Šค(r-tree,b-tree, ์ „๋ฌธ๊ฒ€์ƒ‰, ํ•จ์ˆ˜๊ธฐ๋ฐ˜, ๋ฉ€ํ‹ฐ๋ฐธ๋ฅ˜, ํด๋Ÿฌ์Šคํ„ฐ๋ง, ์œ ๋‹ˆํฌ)
    DB 2025. 2. 15. 15:22

    ๐Ÿ” MySQL ์ธ๋ฑ์Šค ์ข…๋ฅ˜

    MySQL ์ธ๋ฑ์Šค์˜ ๋””์Šคํฌ ์ฝ๊ธฐ ๋ฐฉ์‹์€ ๋žœ๋ค I/O์™€ ์ˆœ์ฐจ I/O๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

    ๋ชจ๋“  ์ธ๋ฑ์Šค๋Š” ๋””์Šคํฌ์—์„œ ์ž๋ฃŒ๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ์ฝ๊ธฐ ์œ„ํ•ด ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•ด ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

    ์ด๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ๋””์Šคํฌ์˜ ๋ฌผ๋ฆฌ์  ๊ตฌ์กฐ(HDD vs SSD), ์ธ๋ฑ์Šค ์ž๋ฃŒ๊ตฌ์กฐ(B+Tree, Hash, Inverted Index)๋ฅผ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

     

    ๐Ÿ› ๏ธ ๋””์Šคํฌ ์ฝ๊ธฐ ๊ธฐ๋ณธ ๊ฐœ๋…

    1๏ธโƒฃ ๋žœ๋ค I/O (Random I/O)

    • ํŠน์ง•: ๋””์Šคํฌ ํ—ค๋“œ๊ฐ€ ๋‹ค์–‘ํ•œ ์œ„์น˜๋กœ ์ด๋™ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰.
    • ๋น„์šฉ: ๋””์Šคํฌ **์‹œํฌ ํƒ€์ž„(Seek Time)**๊ณผ ๋กœํ…Œ์ด์…˜ ๋”œ๋ ˆ์ด ๋ฐœ์ƒ.
    • ๋ฐœ์ƒ ์˜ˆ:
      • B-Tree ํƒ์ƒ‰: ์ธ๋ฑ์Šค ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ๋น„์ˆœ์ฐจ์ ์œผ๋กœ ๋””์Šคํฌ ์ ‘๊ทผ.
      • ํ•ด์‹œ ์ธ๋ฑ์Šค: ํ•ด์‹œ ๋ฒ„ํ‚ท์ด ๋ถ„์‚ฐ๋˜์–ด ์œ„์น˜๊ฐ€ ๋ถˆ๊ทœ์น™ํ•  ๋•Œ.

    2๏ธโƒฃ ์ˆœ์ฐจ I/O (Sequential I/O)

    • ํŠน์ง•: ๋””์Šคํฌ ํ—ค๋“œ๊ฐ€ ์—ฐ์†๋œ ๋ธ”๋ก์„ ์ฝ์œผ๋ฉฐ ๋ฐ์ดํ„ฐ ํƒ์ƒ‰.
    • ๋น„์šฉ: ํ•œ ๋ฒˆ์˜ ์‹œํฌ ํ›„ ์—ฐ์† ์ฝ๊ธฐ ๊ฐ€๋Šฅ → ์„ฑ๋Šฅ ํ–ฅ์ƒ.
    • ๋ฐœ์ƒ ์˜ˆ:
      • ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค(Clustered Index): PK๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ์„ ๋•Œ.
      • ๋ฒ”์œ„ ๊ฒ€์ƒ‰: WHERE age BETWEEN 20 AND 30๊ณผ ๊ฐ™์€ ๋ฒ”์œ„ ์งˆ์˜.
            [CPU I/O ์š”์ฒญ]
                    ↓
            +-----------------+
            | OS I/O Scheduler |
            +-----------------+
                    ↓
            [HDD ์ปจํŠธ๋กค๋Ÿฌ]
                    ↓
         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
         โ”‚       HDD ๋‚ด๋ถ€ ๊ตฌ์กฐ     โ”‚
         โ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”‚
         โ”‚  ํ”Œ๋ž˜ํ„ฐ(Platter)        โ”‚
         โ”‚    โ”Œโ”€โ”€โ”€โ”€โ”       โ”‚
         โ”‚    โ”‚ ๋ฐ์ดํ„ฐ ๋ธ”๋ก โ”‚        โ”‚
         โ”‚    โ”‚(1234๋ฒˆ ๋ธ”๋ก)โ”‚      โ”‚
         โ”‚    โ””โ”€โ”€โ”€โ”€โ”˜       โ”‚
         โ”‚                                 โ”‚
         โ”‚  ํ—ค๋“œ(Head)             โ”‚
         โ”‚  โ””โ”€> ํŠน์ • ํŠธ๋ž™(Track)    โ”‚
         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

    ๐Ÿ› ๏ธ ๋™์ž‘ ๋‹จ๊ณ„ (๋žœ๋ค I/O ์˜ˆ์‹œ)

    1. CPU ์š”์ฒญ:
      • ์‚ฌ์šฉ์ž๊ฐ€ SELECT * FROM users WHERE id=100์„ ์š”์ฒญ.
    2. OS ์ฒ˜๋ฆฌ:
      • I/O ์Šค์ผ€์ค„๋Ÿฌ๋Š” LBA(Logical Block Address) 1234๋ฒˆ ๋ธ”๋ก์„ ์ฐพ์Œ.
    3. HDD ์ปจํŠธ๋กค๋Ÿฌ:
      • LBA๋ฅผ ๋ฌผ๋ฆฌ์  ์œ„์น˜๋กœ ๋ณ€ํ™˜(ํŠธ๋ž™ 5, ์„นํ„ฐ 3).
    4. ํ—ค๋“œ ์ด๋™(Seek Time):
      • **์•ก์ถ”์—์ดํ„ฐ(Actuator)**๊ฐ€ ํ—ค๋“œ๋ฅผ ํŠธ๋ž™ 5๋กœ ์ด๋™(๋žœ๋ค I/O).
    5. ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ:
      • ํ—ค๋“œ๊ฐ€ ํ”Œ๋ž˜ํ„ฐ์˜ ์ž๊ธฐ์žฅ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ.

    ๐Ÿ” HDD ๋””์Šคํฌ I/O  ํ•ต์‹ฌ

    ๐Ÿ“Š ๊ตฌ๋ถ„ ๐Ÿ”„ HDD
    I/O ๋ฐœ์ƒ ํ”Œ๋ž˜ํ„ฐ ํšŒ์ „ ๋ฐ ํ—ค๋“œ ์ด๋™ ํ•„์š”
    ๋žœ๋ค I/O ๋น„์šฉ ๋†’์Œ(Seek Time ๋ฐœ์ƒ)
    ์ˆœ์ฐจ I/O ์„ฑ๋Šฅ ์šฐ์ˆ˜ํ•˜์ง€๋งŒ ๋žœ๋ค I/O๋Š” ๋งค์šฐ ๋А๋ฆผ
    ๋‚ด๋ถ€ ๊ตฌ์กฐ ํ”Œ๋ž˜ํ„ฐ+ํ—ค๋“œ+๋ชจํ„ฐ
    ๋ฐ์ดํ„ฐ ์ €์žฅ ์›๋ฆฌ ์ž๊ธฐ์žฅ ๋ณ€ํ™”๋กœ ๋ฐ์ดํ„ฐ ๊ธฐ๋ก

    โš™๏ธ ๋””์Šคํฌ ์ ‘๊ทผ ๊ณผ์ •: B+Tree ์ธ๋ฑ์Šค๋ฅผ ์ค‘์‹ฌ์œผ๋กœ

    B+Tree ์ธ๋ฑ์Šค๋Š” MySQL InnoDB์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ์กฐ๋กœ, ๋ฐ์ดํ„ฐ์˜ ๋น ๋ฅธ ๊ฒ€์ƒ‰๊ณผ ์ˆœ์ฐจ ์ ‘๊ทผ์„ ๋ชจ๋‘ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

    ๐Ÿงฑ ๊ตฌ์กฐ ๊ฐœ์š”

    • ๋ฃจํŠธ ๋…ธ๋“œ  ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ  ๋ฆฌํ”„ ๋…ธ๋“œ(๋ฐ์ดํ„ฐ ์œ„์น˜ ์ •๋ณด).
    • ๋ฆฌํ”„ ๋…ธ๋“œ: ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค์˜ ๊ฒฝ์šฐ ์‹ค์ œ ๋ฐ์ดํ„ฐ ์ €์žฅ, ๋น„ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋Š” ํฌ์ธํ„ฐ๋งŒ ์ €์žฅ.

    ๐Ÿ“– ๋””์Šคํฌ ์ฝ๊ธฐ ํ๋ฆ„ (์˜ˆ: SELECT * FROM users WHERE age = 25)

    1๏ธโƒฃ ๋ฃจํŠธ ๋…ธ๋“œ ํƒ์ƒ‰ (๋žœ๋ค I/O)
    • DB๋Š” **ํŽ˜์ด์ง€ ๋‹จ์œ„(๊ธฐ๋ณธ 16KB)**๋กœ ๋””์Šคํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Œ.
    • ๋ฃจํŠธ ๋…ธ๋“œ๋Š” ๋””์Šคํฌ์˜ ํŠน์ • ์œ„์น˜์— ์กด์žฌ → ๋žœ๋ค I/O ๋ฐœ์ƒ.
    • ๋ฉ”๋ชจ๋ฆฌ์— ์—†์œผ๋ฉด ๋””์Šคํฌ ์‹œํฌ → ํŽ˜์ด์ง€ ๋กœ๋“œ(OS Page Cache ๋˜๋Š” InnoDB Buffer Pool).
    2๏ธโƒฃ ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ ํƒ์ƒ‰ (๋žœ๋ค I/O)
    • ๋ฃจํŠธ์—์„œ ์ ์ ˆํ•œ ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ ํ•˜์œ„๋กœ ์ด๋™ → ๋žœ๋ค I/O ๋ฐ˜๋ณต.
    3๏ธโƒฃ ๋ฆฌํ”„ ๋…ธ๋“œ ํƒ์ƒ‰ (์ˆœ์ฐจ I/O)
    • ๋ฆฌํ”„ ๋…ธ๋“œ์—์„œ ์—ฐ์†๋œ ํŽ˜์ด์ง€๋ฅผ ์ฝ์œผ๋ฉฐ ์ˆœ์ฐจ I/O ๋ฐœ์ƒ.
    • ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค์˜ ๊ฒฝ์šฐ ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด ๋””์Šคํฌ ์ถ”๊ฐ€ ์ ‘๊ทผ ์ตœ์†Œํ™”.

    ๐ŸŒณ B-Tree ์ธ๋ฑ์Šค (Balanced Tree)

    • ๊ตฌ์กฐ: B-Tree๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ท ํ˜• ํŠธ๋ฆฌ ๊ตฌ์กฐ.
    • ์‚ฌ์šฉ ๋Œ€์ƒ: ์ผ๋ฐ˜์ ์ธ WHERE ์กฐ๊ฑด, ORDER BY, GROUP BY, BETWEEN, =, <, <=, >, >= ๋“ฑ.
    • ์ž‘๋™ ์›๋ฆฌ: ๋ฃจํŠธ ๋…ธ๋“œ → ์ค‘๊ฐ„ ๋…ธ๋“œ → ๋ฆฌํ”„ ๋…ธ๋“œ(๋ฐ์ดํ„ฐ)๋กœ ํƒ์ƒ‰.
    • ์ œ์•ฝ: ๋ฌธ์ž์—ด์˜ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ผ์น˜ํ•ด์•ผ ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉ.
    • ํ™œ์šฉ ์˜ˆ:
       
    CREATE INDEX idx_name ON users(name);
    SELECT * FROM users WHERE name = 'Alice';

     

    ๐ŸŒฒ R-Tree ์ธ๋ฑ์Šค (Spatial Index)

    • ๊ตฌ์กฐ: ๊ณต๊ฐ„ ๋ฐ์ดํ„ฐ(GIS)์šฉ์œผ๋กœ ์„ค๊ณ„๋œ ๋‹ค์ฐจ์› ์ธ๋ฑ์Šค.
    • ์‚ฌ์šฉ ๋Œ€์ƒ: GEOMETRY, POINT, POLYGON ๋“ฑ ๊ณต๊ฐ„ ๋ฐ์ดํ„ฐ.
    • ์ž‘๋™ ์›๋ฆฌ: ๊ณต๊ฐ„ ๊ฐ์ฒด๋ฅผ ์ตœ์†Œ ๊ฒฝ๊ณ„ ์‚ฌ๊ฐํ˜•(MBR)์œผ๋กœ ๊ฐ์‹ธ์„œ ์ธ๋ฑ์‹ฑ.
    • ์ œ์•ฝ: MyISAM ์—”์ง„์—์„œ๋งŒ ์ง€์›(๊ธฐ๋ณธ InnoDB๋Š” ์ง€์› X).
    • ํ™œ์šฉ ์˜ˆ:
       
    CREATE SPATIAL INDEX idx_location ON locations (geo_point);
    SELECT * FROM locations WHERE ST_Contains(geo_area, POINT(10, 20));

     

    ๐Ÿ“– FULLTEXT ์ธ๋ฑ์Šค (์ „๋ฌธ ๊ฒ€์ƒ‰ ์ธ๋ฑ์Šค)

    • ๊ตฌ์กฐ: ์—ญ์ƒ‰์ธ(Inverted Index) ๊ธฐ๋ฐ˜.
    • ์‚ฌ์šฉ ๋Œ€์ƒ: ๊ธด ํ…์ŠคํŠธ ํ•„๋“œ(CHAR, VARCHAR, TEXT).
    • ์ž‘๋™ ์›๋ฆฌ: ๋‹จ์–ด๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐœ๋ณ„ ํ† ํฐ์œผ๋กœ ์ €์žฅ ํ›„ ๊ฒ€์ƒ‰.
    • ์ œ์•ฝ: MATCH() AGAINST() ๊ตฌ๋ฌธ ์‚ฌ์šฉ ํ•„์š”.
    • ํ™œ์šฉ ์˜ˆ
    CREATE FULLTEXT INDEX idx_description ON articles (content);
    SELECT * FROM articles WHERE MATCH(content) AGAINST('MySQL Index');

     

    ๐Ÿ› ๏ธ ์ž๋ฃŒ๊ตฌ์กฐ: ์—ญ์ƒ‰์ธ(Inverted Index)

    ์—ญ์ƒ‰์ธ์€ ์ „ํ†ต์ ์ธ B-Tree์™€ ๋‹ฌ๋ฆฌ ๋‹จ์–ด → ๋ฌธ์„œ๋กœ์˜ ๋งคํ•‘์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

     

    โš™๏ธ ๊ตฌ์กฐ ๋ฐ ๋™์ž‘ ์›๋ฆฌ

    1. ํ† ํฐํ™”(Tokenization): ๋ฌธ์žฅ์„ ๋‹จ์–ด ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌ.
    2. ์—ญ์ƒ‰์ธ ์ƒ์„ฑ: ๊ฐ ๋‹จ์–ด๋ฅผ ํ‚ค๋กœ, ํ•ด๋‹น ๋‹จ์–ด๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ํ–‰(Row) ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ’์œผ๋กœ ์ €์žฅ.
    3. ๊ฒ€์ƒ‰: MATCH() AGAINST() ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ† ํฐ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒ€์ƒ‰.

    ๐Ÿง  ์ž๋ฃŒ๊ตฌ์กฐ ๋‚ด๋ถ€ ๋™์ž‘

    • ํ•ด์‹œ ๋งต(Hash Map) ๋˜๋Š” B-Tree ๊ตฌ์กฐ ์‚ฌ์šฉ(์—”์ง„์— ๋”ฐ๋ผ ๋‹ค๋ฆ„).
    • InnoDB๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ B+Tree๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, MyISAM์€ ํšจ์œจ์ ์ธ ์••์ถ• ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉ.

    ๐Ÿง  ํ•จ์ˆ˜ ๊ธฐ๋ฐ˜ ์ธ๋ฑ์Šค (Functional Index) (MySQL 8.0 ์ด์ƒ)

    • ๊ตฌ์กฐ: ํŠน์ • ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์ธ๋ฑ์Šค๋กœ ์ƒ์„ฑ.
    • ์‚ฌ์šฉ ๋Œ€์ƒ: ์ปฌ๋Ÿผ์ด ํ•จ์ˆ˜ ์—ฐ์‚ฐ์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ.
    • ์ž‘๋™ ์›๋ฆฌ: ํ•จ์ˆ˜ ๊ฒฐ๊ณผ๋ฅผ ์ธ๋ฑ์‹ฑํ•˜์—ฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์„ฑ๋Šฅ ๊ฐœ์„ .
    • ํ™œ์šฉ ์˜ˆ
    CREATE INDEX idx_lower_name ON users((LOWER(name)));
    SELECT * FROM users WHERE LOWER(name) = 'alice';

     

    ๐Ÿ› ๏ธ ์ž๋ฃŒ๊ตฌ์กฐ: B+Tree

    • MySQL์€ ํ•จ์ˆ˜ ๊ฒฐ๊ณผ๋ฅผ ์ธ๋ฑ์Šค์— ์ €์žฅํ•  ๋•Œ๋„ B+Tree๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ์ธ๋ฑ์Šค ์ƒ์„ฑ ์‹œ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜์—ฌ ํ•จ์ˆ˜ ์—ฐ์‚ฐ ๋น„์šฉ์„ ์ค„์ž…๋‹ˆ๋‹ค.

    โš™๏ธ ๋™์ž‘ ์›๋ฆฌ

    1. ์ธ๋ฑ์Šค ์ƒ์„ฑ ์‹œ ํ•จ์ˆ˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ”„ ๋…ธ๋“œ์— ์ €์žฅ.
    2. ๊ฒ€์ƒ‰ ์‹œ ํ•จ์ˆ˜ ์—ฐ์‚ฐ ์—†์ด ์ธ๋ฑ์Šค ์กฐํšŒ ์ˆ˜ํ–‰.

    ๐Ÿ”ข ๋ฉ€ํ‹ฐ๋ฐธ๋ฅ˜ ์ธ๋ฑ์Šค (Multi-Valued Index) (MySQL 8.0 ์ด์ƒ)

    • ๊ตฌ์กฐ: ๋ฐฐ์—ด ๊ฐ™์€ JSON ๋ฐ์ดํ„ฐ ์•ˆ์˜ ๋‹ค์ค‘ ๊ฐ’์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค.
    • ์‚ฌ์šฉ ๋Œ€์ƒ: JSON ์ปฌ๋Ÿผ ์•ˆ์˜ ๋‹ค์ค‘ ๊ฐ’์„ ๊ฐœ๋ณ„ ์ธ๋ฑ์Šค๋กœ ๊ด€๋ฆฌ.
    • ์ž‘๋™ ์›๋ฆฌ: JSON ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ๋ฅผ ๋…๋ฆฝ์ ์ธ ์ธ๋ฑ์Šค ํ•ญ๋ชฉ์œผ๋กœ ์ €์žฅ.
    • ํ™œ์šฉ ์˜ˆ:
       
    CREATE INDEX idx_tags ON posts((JSON_EXTRACT(tags, '$[*]')));
    SELECT * FROM posts WHERE JSON_CONTAINS(tags, '["mysql"]');

     

    ๐Ÿ› ๏ธ ์ž๋ฃŒ๊ตฌ์กฐ: B+Tree

    • JSON ๋ฐฐ์—ด ๊ฐ™์€ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ์˜ ์ธ๋ฑ์‹ฑ์„ ์œ„ํ•ด ๋„์ž….
    • ํ•˜๋‚˜์˜ ํ–‰์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ๋ฑ์Šค ํ‚ค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ.

    โš™๏ธ ๋™์ž‘ ์›๋ฆฌ

    1. JSON ๋ฐฐ์—ด ๋‚ด ์›์†Œ๋ฅผ ๊ฐœ๋ณ„ ์ธ๋ฑ์Šค ํ‚ค๋กœ ์ €์žฅ.
    2. ๊ฒ€์ƒ‰ ์‹œ B+Tree๋ฅผ ํ†ตํ•ด ๊ฐ ๊ฐ’ ํƒ์ƒ‰.

     

    ๐Ÿ”— ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค (Clustered Index)

    • ๊ตฌ์กฐ: ๋ฐ์ดํ„ฐ ์ž์ฒด๊ฐ€ ์ธ๋ฑ์Šค์˜ ๋ฆฌํ”„ ๋…ธ๋“œ์— ํฌํ•จ.
    • ์‚ฌ์šฉ ๋Œ€์ƒ: InnoDB์˜ Primary Key.
    • ์ž‘๋™ ์›๋ฆฌ: B+Tree์˜ ๋ฆฌํ”„ ๋…ธ๋“œ๊ฐ€ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จ.
    • ํŠน์ง•:
      • ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋กœ ์ž๋™ ์ƒ์„ฑ(InnoDB).
      • ๊ธฐ๋ณธ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ด๋ธ” ์ •๋ ฌ.
    CREATE TABLE users (
        id INT PRIMARY KEY, -- ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค ์ž๋™ ์ƒ์„ฑ
        name VARCHAR(100)
    );

     

    โš”๏ธ ํด๋Ÿฌ์Šคํ„ฐ๋“œ vs ๋…ผํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค

    ๊ตฌ๋ถ„ ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค ๋…ผํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค
    ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐฉ์‹ ๋ฆฌํ”„ ๋…ธ๋“œ์— ์‹ค์ œ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฆฌํ”„ ๋…ธ๋“œ์— ํฌ์ธํ„ฐ๋งŒ ์ €์žฅ
    ์ •๋ ฌ ๊ธฐ์ค€ ๊ธฐ๋ณธ ํ‚ค(Primary Key)์— ๋”ฐ๋ผ ์ •๋ ฌ ๋ณ„๋„ ์ปฌ๋Ÿผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ
    ๊ฐœ์ˆ˜ ์ œํ•œ ํ…Œ์ด๋ธ”๋‹น 1๊ฐœ ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑ ๊ฐ€๋Šฅ
    ์„ฑ๋Šฅ ํŠน์„ฑ ๋ฒ”์œ„ ๊ฒ€์ƒ‰, PK ์กฐํšŒ ์‹œ ๋น ๋ฆ„ ํŠน์ • ์ปฌ๋Ÿผ ์กฐ๊ฑด ๊ฒ€์ƒ‰ ์‹œ ํšจ์œจ์ 
    ์‚ฌ์šฉ ์˜ˆ InnoDB ํ…Œ์ด๋ธ”์˜ PRIMARY KEY ๋ณด์กฐ ์ธ๋ฑ์Šค(Secondary Index)

    ๐Ÿ”น ํ™œ์šฉ ํฌ์ธํŠธ:

    • ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋Š” ๋ฒ”์œ„ ์กฐํšŒ์— ์œ ๋ฆฌ.
    • ๋…ผํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋Š” ํŠน์ • ์ปฌ๋Ÿผ ๊ฒ€์ƒ‰ ์‹œ ํšจ์œจ์ .
    • ๋ณตํ•ฉ ์ธ๋ฑ์Šค(Composite Index)๋ฅผ ํ†ตํ•ด ๋‹ค์ค‘ ์ปฌ๋Ÿผ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

     

Designed by Tistory.