๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ชฉ๋ก์ด ์—†์Šต๋‹ˆ๋‹ค.

[MySQL] Storage Engine ( MyISAM๊ณผ InnoDB )

๐Ÿ›ข DB/MySQL
    ๋ฐ˜์‘ํ˜•

    MySQL Server




    MySQL์€ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„๋“ค(Storage Engines ๋˜๋Š” Database Engines)์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ์š”


    ์šฐ์„  ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด๋ผ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ •๋ฆฌ๋ฅผ ํ•˜๊ณ  ๋‹ค์Œ์œผ๋กœ ๋Œ€ํ‘œ์ ์ธ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ธ InnoDB์™€ MyISAM์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ด์š”




    1. ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„(Storage Engine)


    DB(Database)์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์‚ญ์ œ ํ˜น์€ ์ˆ˜์ •์„ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ์—์š”.


    ์ด ์—”์ง„์€ DB๋งˆ๋‹ค ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด ๋‹ค๋ฅด๊ณ  ๊ทธ ๋‚ด์šฉ ๋˜ํ•œ ์กฐ๊ธˆ์”ฉ ๋‹ฌ๋ผ์š”




    ์—ฌ๋Ÿฌ DB์ค‘์— ์ •๋ฆฌํ•  MySQL์˜ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ ์ €์žฅ์žฅ์น˜์— ๋„ฃ๊ฑฐ๋‚˜ ์ฝ์–ด์˜ค๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์—”์ง„์„ ์กฐ์ž‘ํ•  ๋•Œ


    DBMS(Database Management System) ๊ณ ์œ ์˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ํ†ตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ด์š”




    MySQL์˜ ์—”์ง„์˜ ํŠน์ง•์€ ๋ฐ”๋กœ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ธ๋ฐ์š” ๋Œ€๋ถ€๋ถ„์˜ DB๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ 


    ์‚ฌ์šฉ์ž๊ฐ€ ๋‚ด์žฅ๋œ ์—”์ง„๊ณผ ์ƒํ˜ธ์ž‘์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” ์ž์‹ ๋งŒ์˜ API๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ต๋‹ˆ๋‹ค


    ๋˜, ์—”์ง„์ด๋ผ๋Š” ์šฉ์–ด๋Š” DB Server ๋˜๋Š” DBMS๋ผ๋Š” ์šฉ์–ด๋กœ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•˜๊ณ  ์œ„์— ๋ณด์ด๋Š” MySQL๋„ ๊ทธ๋ ‡์ง€๋งŒ ํ˜„๋Œ€์˜ ๋งŽ์€ DBMS๋Š”


    ๋™์ผํ•œ DB๋‚ด์˜ ๋‹ค์ค‘ ์—”์ง„์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค ํŠน์„ฑ์— ๋งž๊ฒŒ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ๊ตฌ์„ฑํ•˜๋ฉด ๋” ์ข‹์€ ํ’ˆ์งˆ์˜ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์„๊ฑฐ๋ผ ์ƒ๊ฐ๋˜์š”!




    2. MyISAM


    MySQL์˜ ๋Œ€ํ‘œ ์—”์ง„์ค‘์— ํ•˜๋‚˜์ธ MyISAM์€ ISAM(Indexed Sequential Access Method) ์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฒ„์ „์ธ๋ฐ์š”


    MySQL 5.5 ์ด์ „ ๋ฒ„์ „์˜ ๊ธฐ๋ณธ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด์—ˆ๋‹ค๊ณ  ํ•ด์š”


    ๊ฐ€์žฅ ํฐ ํŠน์ง•์œผ๋กœ๋Š” ๋น„-ํŠธ๋žœ์ ์…˜-์„ธ์ดํ”„( Non-transactional-safe ) ํ…Œ์ด๋ธ”์„ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ์ 


    ๋‹ค๋ฅธ ํŠน์ง•์œผ๋กœ๋Š” MySQL์˜ ๋‹ค๋ฅธ ๋Œ€ํ‘œ ์—”์ง„์ธ InnoDB์— ๋น„ํ•ด์„œ ๊ธฐ๋Šฅ์ด ๋ณ„๋กœ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๋””์ž์ธ์ด ๋‹จ์ˆœํ•˜๊ณ 


    ์ „๋ฐ˜์ ์œผ๋กœ ์†๋„๊ฐ€ ๋น„๊ต์  ๋นจ๋ผ์š” ( Select ์ฟผ๋ฆฌ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ DB๋กœ๋ถ€ํ„ฐ ์ฝ์–ด์˜ค๋Š” ์ž‘์—… ์†๋„๊ฐ€ ๋นจ๋ผ์š”! )


    ์ธ๋ฑ์‹ฑ์—๋Š” B-Tree, R-Tree, Full-text๋ฅผ ์ง€์›ํ•˜๋Š”๋ฐ Full-text ์ธ๋ฑ์‹ฑ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ํ•˜๋ ค๋Š” ๋‚ด์šฉ์— ๋Œ€ํ•œ ๋ณตํ•ฉ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ด์š”




    ํ•˜์ง€๋งŒ, Lock์„ Table-level๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— INSERT๋‚˜ UPDATE์™€ ๊ฐ™์€ ์“ฐ๊ธฐ ์ž‘์—…์€ ์†๋„๊ฐ€ ๋Š๋ฆฌ๊ณ 


    ๋น„-ํŠธ๋žœ์ ์…˜-์„ธ์ดํ”„ ํ…Œ์ด๋ธ”์„ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์— ๋Œ€ํ•œ ๋ณด์žฅ์ด ์•ˆ๋˜์š”


    ๊ทธ๋ž˜์„œ ๋ฌด๊ฒฐ์„ฑ์€ ๊ฐœ๋ฐœ์ž๋‚˜ DBA๊ฐ€ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์ฃผ์–ด์•ผ ํ•ด์š”




    ์ด๋Ÿฌํ•œ ํŠน์ง•์œผ๋กœ MyISAM์€ ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ์›น์‚ฌ์ดํŠธ๋‚˜ ๋กœ๊ทธ ํ…Œ์ด๋ธ” ํ˜น์€ ์“ฐ๊ธฐ์ž‘์—…์ด ๋ณ„๋กœ ์—†๋Š” ์ฝ๊ธฐ์ž‘์—… ์œ„์ฃผ์˜ ํ…Œ์ด๋ธ”์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์•„์š”




    3. InnoDB


    MySQL 5.5 ๋ฒ„์ „๋ถ€ํ„ฐ ๊ธฐ๋ณธ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์œผ๋กœ์จ MyISAM๊ณผ ๋ฐ˜์ „๋˜๊ฒŒ ํŠธ๋žœ์ ์…˜-์„ธ์ดํ”„( transactional-safe ) ํ…Œ์ด๋ธ”์„ ๊ด€๋ฆฌํ•˜๊ณ  ACID Transaction์„ ์ง€์›ํ•ด์š”


    ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์„ ์กฐ๊ธˆ ์‚ดํŽด๋ณด์ž๋ฉด 


    ์ธ๋ฑ์Šค๋Š” B-Tree์™€ Clustered๋ฅผ ์ง€์›ํ•˜๊ณ , ์™ธ๋ถ€ํ‚ค( foreign key )์ง€์›ํ•˜์—ฌ ๋™์‹œ์„ฑ์„ ์ œ์–ดํ•ด์š”


    ๊ทธ๋ฆฌ๊ณ  ์ž๋™ ์—๋Ÿฌ ๋ณต๊ตฌ ๊ธฐ๋Šฅ ๋ฐ backup ํ˜น์€ ํŠน์ • ์‹œ์ ์œผ๋กœ ๋ณต๊ตฌ๋ฅผ ์ง€์›ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•ด์š”


    ๋˜ํ•œ MyISAM์€ Table-level Lock์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ˜๋ฉด InnoDB๋Š” Row-level Lock์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์“ฐ๊ธฐ ์ž‘์—…( INSERT, UPDATE, DELETE )์— ๋Œ€ํ•œ ์†๋„๊ฐ€ ๋นจ๋ผ์š”




    ํ•˜์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•˜๋‹ค ๋ณด๋‹ˆ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๋””์ž์ธ์— ๋งŽ์€ ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๊ณ  ์‹œ์Šคํ…œ ์ž์›์„ ๋งŽ์ด ์‚ฌ์šฉํ•ด์š”


    ์ธ๋ฑ์Šค๋ฉด์—์„œ๋Š” full-text ์ธ๋ฑ์‹ฑ์„ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๋‚ด์šฉ์— ๋Œ€ํ•œ ๋ณตํ•ฉ๊ฒ€์ƒ‰์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์š”




    ์ด๋Ÿฐ ํŠน์ง•์œผ๋กœ InnoDB๋Š” ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๊ฐ–๋Š” ํ…Œ์ด๋ธ”( ์˜ˆ๋ฅผ ๋“ค๋ฉด, ๋ˆ์— ๊ด€๋ จ๋œ ํ…Œ์ด๋ธ” ) ๊ฐฑ์‹ (์“ฐ๊ธฐ) ์œ„์ฃผ์˜ ํŠธ๋žœ์ ์…˜์ด ์š”๊ตฌ๋˜๋Š” ํ…Œ์ด๋ธ”์— ์ ํ•ฉํ•ด์š”




    4. MyISAM vs InnoDB


    ๋งˆ์ง€๋ง‰์œผ๋กœ ํ‘œ๋กœ ์ •๋ฆฌ

     

    ํŠน์ง•

    MyISAM 

    InnoDB 

    ๊ตฌ์กฐ์˜ ๋ณต์žก์„ฑ 

    ๊ฐ„๋‹จ / ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๋””์ž์ธ ๋˜ํ•œ ๊ฐ„๋‹จ 

    ๋ณต์žก / ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๋””์ž์ธ ๋˜ํ•œ ๋ณต์žก 

     ํŠธ๋žœ์ ์…˜

    ์—†์Œ 

    ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ 

    Locking-level

    Table-Level-Lock 

    Row-Level -Lock

    ๊ธฐ๋Šฅ ์ง€์› 

    B-Tree, R-Tree, Full-text 

    B-Tree, Clustered 

    ์™ธ๋ž˜ํ‚ค ์ง€์› 

    ์ง€์› ์•ˆ ํ•จ 

    ์ง€์›









    ๋ฐ˜์‘ํ˜•