MySQL 8.0 기능 검증

RayHong·2023년 9월 7일
0

MySQL

목록 보기
3/5

MySQL 8.0 신기술 및 향상된 기능

DDL 개선

  • Rebuilds Table 및 meta data lock 없어짐으로 수행 시간 단축 및 안정성 향상

신규 Index 생성 (Descending)

  • Descending 인덱스 기능 추가로 Query 속도 향상

Functional Key

  • 가공된 컬럼의 인덱싱 설정으로 다양한 Select Query 대응

Invisible Index

  • 인덱스 사용 유/무를 제어함으로서 튜닝 시간 단축

InnoDB 개선(Auto_increment)

  • MySQL 5.7 롤백 시 : 할당 받은 값 재사용.
  • MySQL 8.0 롤백 시 : 이전에 할당된 값 재사용 불가.

InnoDB 개선(NOWAIT and SKIP LOCKED)

  • NOWAIT : 쿼리를 실행하며, lock이 걸린 부분이 있다면, 기다리지 않고 실패.
    MySQL 5.7 lock 발생시 app에서는 innodb_lock_wait_timeout 설정시 까지 대기하다 timeout 발생 이후 재시도.
  • SKIP LOCKED : 쿼리를 실행하며, lock 이 걸린 부분이 있다면, SKIP 하고 다음 row를 읽어들인다.


JSON UPDATE 개선

신규 SQL Function 추가
Windows Functions

  • 키워드 OVER
  • 단일 행 or 여러 행에 대한 집계 연산을 수행하여 부분 통계 작업에 용이
  • window Functions

CTE (Common Tables Expressions)

  • with 쿼리
  • 서브 쿼리로 쓰이는 파생 테이블 (Derived Table) 과 비슷한 개념으로 사용되며 하나의 쿼리 문이 끝날 때까지 지속되는 것으로 SELECT, INSERT, UPDATE 또는 DELETE 문 내에서 여러 번 참조 가능한 결과 집합.
  • CTE 장점
  1. Better Readability : 쿼리를 단순화하여 가독성을 높일 수 있음
  2. Easier Channing : 파생 테이블과 다르게 이전에 정의한 CTE 도 참조할 수 있을 뿐만 아니라
  3. Can be referenced multiple times : 한 번의 정의로 여러 번 참조 가능함.
  • 제한사항
  1. Oracle 과 다르게 MySQL 은 CTE 를 Materializing 함 (cache 처럼 임시 저장)
    무분별하게 사용할 경우 Query performance 가 오히려 떨어질 수 있음
  2. Optimizer 가 실행계획을 생성할 때 CTE 의 최적화를 고려하지 않고 결과를 그대로 사용
    CTE 를 생성할 때 필요한 데이터를 미리 필터링하는 등 최적화를 고려해야함.

profile
Oracle/ MySQL/ AWS DBA. 사람을 존중하고 공감하려 노력하고 있습니다. 잘못된 방식의 업무는 과정과 결과가 반복되지 않으려 개선하고 있습니다.

0개의 댓글