๐Ÿ’ป [Theory] MySQL InnoDB์™€ MyISAM

๐Ÿ’ป [Theory] MySQL InnoDB์™€ MyISAM

์ด๋ฒˆ์—๋Š” RDB์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” MySQL์˜ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ธ
InnoDB์™€ MyISAM์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด๋ž€?

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…, ์ถ”์ถœ, ์—…๋ฐ์ดํŠธ ๋ฐ ์‚ญ์ œ(CRUD ์ฐธ์กฐ)ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ์ด๋‹ค.
  • ์ฆ‰, ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋– ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ €์žฅํ•˜๊ณ  ์ ‘๊ทผํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ(CRUD)์„ ์ œ๊ณตํ•œ๋‹ค.
  • ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์ด ์–ผ๋งˆ๋‚˜ ๋น ๋ฅธ์ง€, ์–ผ๋งˆ๋‚˜ ์•ˆ์ •์ ์ธ์ง€, ํŠธ๋žœ์žญ์…˜ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”์ง€ ๋“ฑ์˜ ์ฐจ์ด์ ์ด ๋ฐœ์ƒํ•œ๋‹ค
  • MySQL์˜ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์—”์ง„์œผ๋กœ๋Š” InnoDB์™€ MyISAM์ด ์žˆ๋‹ค.

MyISAM

MyISAM์€ MySQL ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์‹œ์Šคํ…œ 5.5 ๋ฒ„์ „ ์ด์ „์˜ ๊ธฐ๋ณธ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด๋‹ค. ์ด๊ฒƒ์€ ์˜› ISAM ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ–ˆ์ง€๋งŒ, ๋” ๋งŽ์€ ์œ ์šฉํ•œ ํ™•์žฅ์„ฑ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋‹ค. MyISAM์˜ ๊ฐ€์žฅ ๋ถ€์กฑํ•œ ์ ์€ ํŠธ๋žœ์žญ์…˜์˜ ์ง€์› ๋ถ€์žฌ์˜€๋‹ค. MySQL 5.5๊ณผ ์ดํ›„ ํŒ์€ ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ์ œํ•œ๊ณผ ๋” ๋†’์€ ๋™์‹œ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด InnoDB ์—”์ง„์œผ๋กœ ์ „ํ™˜๋˜์—ˆ๋‹ค.

  • ํ•ญ์ƒ ํ…Œ์ด๋ธ”์— ROW COUNT๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— SELECT count(*) ๋ช…๋ น์‹œ ๋น ๋ฅด๊ณ , SELECT ๋ช…๋ น์‹œ์—๋„ ๋น ๋ฅธ ์†๋„๋ฅผ ์ง€์›
  • full text ์ธ๋ฑ์Šค๋ฅผ ์ง€์›ํ•˜๋Š”๋ฐ ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Read Only๊ธฐ๋Šฅ์ด ๋งŽ์€ ์„œ๋น„์Šค์ผ ์ˆ˜๋ก MyISAM์ด ํšจ์œจ์ ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • full text ์ธ๋ฑ์Šค : ๊ฒ€์ƒ‰ ์—”์ง„๊ณผ ์œ ์‚ฌํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž์—ฐ ์–ธ์–ด๋ฅผ ์ด์šฉํ•ด ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ํŠน๋ณ„ํ•œ ์ธ๋ฑ์Šค๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ฌธ์ž์—ด์˜ ๋‹จ์–ด๋ฅผ ์ €์žฅ
  • ํŠธ๋žœ์žญ์…˜ ๋ฏธ์ œ๊ณต
  • table level locking
    • SELECT INSERT UPDATE DELETE์‹œ ํ•ด๋‹น Table ์ „์ฒด์— Locking์ด ๊ฑธ๋ฆฐ๋‹ค.

InnoDB

MySQL 5.5 ์ดํ›„์˜ ๊ธฐ๋ณธ ์—”์ง„์œผ๋กœ ํŠธ๋žœ์žญ์…˜ ์ง€์›, ๋™์‹œ์„ฑ์— ๋†’์€ ์„ฑ๋Šฅ, ์™ธ๋ž˜ํ‚ค ์ง€์› ๋“ฑ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋“ค์ด ์ถ”๊ฐ€ ๋˜์—ˆ๋‹ค.

  • ACID ํŠธ๋žœ์žญ์…˜ ์ง€์›
  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์— ๋Œ€ํ•œ ๋ณด์žฅ
  • MyISAM๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ORACLE์ฒ˜๋Ÿผ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค.
    • commit, rollback, ์žฅ์•  ๋ณต๊ตฌ, row-level locking, ์™ธ๋ž˜ํ‚ค ๋“ฑ
  • row level locking ์ง€์›
    • ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ์— ์œ ๋ฆฌํ•œ ์ ์ด ์žˆ์–ด์„œ, ์‚ฌ์šฉ์ž์˜ CRUD๊ฐ€ ๋งŽ์€ ์„œ๋น„์Šค์— ์œ ๋ฆฌํ•˜๋‹ค.
  • ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž ๋™์‹œ์ ‘์†๊ณผ ํผํฌ๋จผ์Šค๊ฐ€ ์ฆ๊ฐ€ํ•˜์—ฌ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ตœ๋Œ€์˜ ํผํฌ๋จผ์Šค๋ฅผ ๋‚ด๋„๋ก ์„ค๊ณ„
    • ๋™์‹œ์ ์œผ๋กœ ์š”์ฒญ์ด ๋งŽ์ด์˜ค๋Š” ๋†’์€ ํผํฌ๋จผ์Šค๊ฐ€ ํ•„์š”ํ•œ ๋Œ€์šฉ๋Ÿ‰ ์‚ฌ์ดํŠธ์— ์ ํ•ฉ
  • full text ์ธ๋ฑ์Šค ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ •๋ฆฌ

  • ๊ฐ€์žฅ ํฐ ํŠน์ง•์œผ๋กœ ํŠธ๋žœ์žญ์…˜์˜ ์œ ๋ฌด์™€ locking level์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
  • InnoDB ์—”์ง„์€ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๊ณ  ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ถ€๋ถ„์—์„œ ํšจ์œจ์ ์ด๋‹ค.
  • MyISAM ์—”์ง„์€ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š” ์—†๊ณ , Read only ๊ธฐ๋Šฅ์ด ๋งŽ์€ ์„œ๋น„์Šค์ผ์ˆ˜๋ก ํšจ์œจ์ ์ด๋‹ค.
  • ํ•œ์ค„๋กœ ์ •๋ฆฌํ•˜๋ฉด, InnoDB๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ณ€ํ™”๊ฐ€ ๋งŽ์€ ์„œ๋น„์Šค์—, MyISAM์€ SELECT๊ฐ€ ๋งŽ์€ ์„œ๋น„์Šค์— ์ ํ•ฉํ•˜๋‹ค ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์šฉ๋„์— ๋”ฐ๋ผ InnoDB๋‚˜ MyISAM ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ๊ฒฐ์ •ํ•˜๋Š”๋ฐ, InnoDB์™€ MyISAM ํ…Œ์ด๋ธ”์„ ๊ฐ™์ด ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์กฐ์ธ์‹œ ์ฃผ์˜ํ•ด์•ผํ•œ๋‹ค

๋

 MySQL์˜ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ธ
 InnoDB์™€ MyISAM์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.
 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ™

Reference

https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EC%97%94%EC%A7%84

https://velog.io/@gillog/DBInnoDB-VS-MyISAM

Written on June 22, 2021