양바른 님의 "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가 제공하는 기능을 잘 숙지해서 쿼리 튜닝을 해야 함
'Database > Mysql' 카테고리의 다른 글
[업무에 바로 쓰는 SQL 튜닝] 4. 악성 SQL 튜닝으로 초보자 탈출하기 (0) | 2025.03.18 |
---|---|
[업무에 바로 쓰는 SQL 튜닝] 2. SQL 튜닝 용어를 직관적으로 이해하기 (3) | 2025.03.18 |
[Real MySQL] 16-2. 복제: 타입 (0) | 2025.03.14 |
[Real MySQL] 14-2. 스토어드 프로그램: 참고사항 (0) | 2025.03.13 |
[Real MySQL] 14-1. 스토어드 프로그램: 기본 (1) | 2025.03.13 |