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 장점
- Better Readability : 쿼리를 단순화하여 가독성을 높일 수 있음
- Easier Channing : 파생 테이블과 다르게 이전에 정의한 CTE 도 참조할 수 있을 뿐만 아니라
- Can be referenced multiple times : 한 번의 정의로 여러 번 참조 가능함.
- 제한사항
- Oracle 과 다르게 MySQL 은 CTE 를 Materializing 함 (cache 처럼 임시 저장)
무분별하게 사용할 경우 Query performance 가 오히려 떨어질 수 있음- Optimizer 가 실행계획을 생성할 때 CTE 의 최적화를 고려하지 않고 결과를 그대로 사용
CTE 를 생성할 때 필요한 데이터를 미리 필터링하는 등 최적화를 고려해야함.