CS/DB

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

:)jun 2023. 12. 2. 09:39

버전 확인 방법-1

show variables like 'version';

결과값

 

버전 확인 방법-2

SELECT @@version;

결과값

1.1.1 부각 배경

  • MySQL은 상용 버전, 무료 버전이 있다
  • MariaDB는 완전한 오픈소스 소프트웨어

1.1.2 DB 엔진 영향력

  • U2L(Unix to Linux), U2C(Unix to Cloud) 흐름을 타고 오픈소스 데이터베이스로 마이그레이션이 주류를 이룬다.

1.2 상용 RDBMS와의 차이점

1.2.1 구조적 차이(MySQL, MariaDB 와 Oracle 간의 차이 중심)

기본적으로 데이터가 저장되는 스토리지 구조 측면에서 큰 차이

  • 오라클DB는 통합된 스토리지 하나를 공유하여 사용하는 방식 (Shared everything) → 사용자가 어느 DB 서버에 접속하더라도 같은 결과를 출력할 수 있다.
  • MySQL은 물리적인 DB서버마다 독립적으로 스토리지를 할당하는 방식(Shared nothing) → 클러스터나 복제 구성으로 운영하더라도 보통은 마스터-슬레이브 구조가 대부분. 마스터 노드는 쓰기/읽기는 모두 처리, 슬레이브 노드는 읽기 처리만.

쿼리 오프로딩: DB 서버의 트랜잭션에서 쓰기 트랜잭션과 읽기 트랜잭션을 분리하여 DB 처리량을 증가시키는 성능 향상 기법

  • 쓰기 트랜잭션: UPDATE, INSERT, DELETE
  • 읽기 트랜잭션: SELECT

1.2.2 지원 기능 차이

조인 알고리즘 차이

  • MySQL은 대부분 중첩 루프 조인(nested loop join) 방식
  • 오라클은 중첩 루프 조인 방식뿐만 아니라 정렬 병합 조인(sort merge join)과 해시 조인(hash join)방식도 제공

MySQL은 데이터를 저장하는 스토리지 엔진이라는 개념을 포함하므로 오픈소스 DBMS를 바로 꽂아서 사용할 수 있는 확장성이 특징 (DBMS의 플러그 앤 플레이 기능)

 

1.2.3 SQL 구문 차이

Null 대체

MySQL

SELECT IFNULL(col1, A) col 1
FROM tab;

Oracle

SELECT NVL(col1, A) col1
FROM tab;

 

페이징 처리

MySQL

SELECT col1
FROM tab
LIMIT 5;

Oracle

SELECT col1
FROM tab
WHERE ROWNUM <= 5;

 

현재 날짜

MySQL

SELECT NOW() AS date;

Oracle

SELECT SYSDATE AS date
FROM dual;

 

조건문

MySQL

SELECT IF(col1 = 'A', 'apple', '-') AS col1
FROM tab;

Oracle

SELECT DECODE(col1, 'A', 'apple', '-') AS col1
FROM tab;

 

날짜 형식

MySQL

SELECT DATE_FORMAT(NOW(), '%Y%m%d %H%i%s') AS date;

Oracle

SELECT TO_CHAR(SYSDATE, 'YYYYMMDD HH24MISS') AS date
FROM DUAL;

 

자동 증갓값

MariaDB와 오라클에서는 시퀀스라는 오브젝트를 활용

  1. 먼저 CREATE SEQUENCE 문으로 시퀀스 오브젝트를 생성한 뒤,
  2. SELECT 시퀀스명.nextval FROM dual; 구문으로 신규 데이터의 시퀀스 숫자를 가져온다.

MySQL에서는 특정 열의 속성으로 auto_increment를 명시하거나 시퀀스 오브젝트를 활용할 수 있다.

  1. CREATE SEQUENCE
  2. SELECT nextval (시퀀스명);

문자 결합

MySQL

SELECT CONCAT('A', 'B') TEXT;

Oracle

SELECT 'A'||'B' TEXT
FROM DUAL;
SELECT CONCAT('A', 'B') TEXT;

 

문자 추출

MySQL

SELECT SUBSTRING('ABCDE', 2, 3) AS sub_string;

해당 문자열의 2번째 글자부터 3개를 가져온다.

결과값: BCD

Oracle

SELECT SUBSTR('ABCDE', 2, 3) AS sub_string
FROM DUAL;

결과값: BCD

'CS > DB' 카테고리의 다른 글

시간 기준 변경 (LocalTimeZone → UTC)  (0) 2023.08.28