Database/Mysql

[업무에 바로 쓰는 SQL 튜닝] 1. MySQL과 MariaDB 개요

noahkim_ 2025. 3. 18. 10:58

양바른 님의 "Real MySQL" 책을 정리한 포스팅 입니다.

 

1. 현황

MySQL

  • 1995년 오픈소스로 배포된 DBMS
  • 2010년 오라클(Oracle)에 인수됨
  • 상용 버전과 무료 버전으로 구분됨
  • 장점: 대용량 데이터 처리, 높은 가용성, 안정성

 

MariaDB

  • MySQL 핵심 개발자들이 독립하여 MariaDB 개발
  • MySQL이 오라클에 인수되면서 라이선스 정책 및 개발 방향 변화
    • 오픈소스 정책을 유지
    • MySQL 5.5 버전 이후 독자적인 길을 걷기 시작
      • SQL 문법과 실행 계획 출력 방식은 MySQL과 유사
      • 옵티마이저 기능 등 일부 차이점 존재

 

2. 상용 RDBMS와의 차이점

구조적 차이

구분  Oracle  MySQL
이중화 스토리지 구조 Shared Storage (공유 스토리지) 
- 통합된 스토리지 하나를 공유
Shared-Nothing (개별 스토리지)
- DB 서버마다 개별적인 스토리지를 사용
일관성 유지 모든 서버가 같은 데이터를 공유하기 용이 Replication 방식으로 데이터 동기화
서버 역할 분리 X 읽기 전용 / 쓰기 전용 등 역할 분리 가능
쿼리 최적화 일반적인 튜닝 수행 물리적 위치를 고려한 쿼리 튜닝 가능
조인 방식 Nested Loop Join ✅
Hash Join ✅
Sort Merge Join ✅
Nested Loop Join ✅
Hash Join ❌ (8.0+ 및 설정 필요 ✅)
Sort Merge Join ❌
스토리지 엔진 단일 엔진 사용 여러 개의 스토리지 엔진 지원
- 확장성 높음 (Plug & Play)
메모리 사용률 높음
낮음 (저사양 환경에서도 운영 가능)

 

SQL 구문 차이

기능 MySQL / MariaDB ORACLE
NULL 대체 IFNULL(열명, '대체값') NVL(열명, '대체값')
페이징 처리 LIMIT 숫자 ROWNUM <= 숫자
조건문 IF(조건식, '참값', '거짓값')  DECODE(열명, '값', '참값', '거짓값')
날짜 형식   DATE_FORMAT(날짜열, '형식') TO_CHAR(날짜열, '형식')
자동 증가값   AUTO_INCREMENT
NEXTVAL (MariaDB 10.3+)
SEQUENCE.NEXTVAL
문자 결합   CONCAT(열값 or 문자열, 열값 or 문자열) CONCAT(열값 or 문자열, 열값 or 문자열)
열값 or 문자열 || 열값 or 문자열
문자 추출   SUBSTRING(열값 or 문자열, 시작 인덱스, 길이) SUBSTR(열값 or 문자열, 시작 인덱스, 길이)

 

 

3. MySQL과 MariaDB 튜닝의 중요성

  • 무료, 경량화 등의 장점이 있으나 알고리즘이 적어 성능적으로 불리함
    • 대부분의 SQL들이 Nested Loop Join으로 수행됨
  • 쿼리 결과가 메모리에 적재되는 캐시 기능에 한계가 있음
    • 데이터가 변경되면 캐시를 모두 비움
  • 즉, DBMS가 제공하는 기능을 잘 숙지해서 쿼리 튜닝을 해야 함