MySQL 8 버전 특징

2022. 2. 23. 01:13DB

NoSQL

MySQL Document Store는 개발자가 전통적인 SQL 관계형 응용 프로그램과 NoSQL, schema-free document 데이터 베이스 응용 프로그램일 개발하는데 최대한의 유연성을 제공합니다. 따라서 별도의 NoSQL document 데이터베이스가 필요하지 않습니다. MySQL Document Store는 multi-document 트랜젝션 지원과 schema-less JSON 문서를 위한 완전한 ACID 준수를 지원합니다.

JSON

MySQL 8은 NoSQL에 사용되는 JSON 데이터에 대한 다양한 함수들을 제공합니다.

JSON Table Funciton: https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html
JSON Aggregation Function: https://dev.mysql.com/doc/refman/8.0/en/group-by-functions.html#function_json-arrayagg

NOWAIT과 SKIP LOCKED

일반적으로 로우가 UPDATE 혹은 SELECT...FOR UPDATE로 인해 LOCK 된다면 다른 트랜잭션은 해당 로우에 액세스하기 위해 대기해야합니다. 일부 유즈 케이스에서는 로우가 잠겨있거나 잠긴 로우를 무시한 경우 즉시 반환해야할 필요가 있습니다. NOWAIT을 사용하는 LOCKING 절은 로우 잠금을 얻기 위해 절대로 기다리지 않습니다. 대신 쿼리가 실패하여 오류가 발생합니다. SKIP LOCKED를 사용하는 잠금 절은 나열된 테이블에 대한 로우 잠금을 확보하기 위해 절대로 기다리지 않습니다. 대신, 잠긴 로우는 읽히지 않습니다.

Descending Indexes

MySQL 8은 내림차순 인덱스를 지원합니다.

Common Table Expression (CTE)

Common Table Expression은 단일 명령문 범위 내에 존재하며 그 명령문 내에서 나중에 여러 번 참조될 수 있는 이름이 지정된 임시 테이블 생성 방식입니다.

WITH cte (col1, col2) AS
(
  SELECT 1, 2
  UNION ALL
  SELECT 3, 4
)
SELECT col1, col2 FROM cte;

CTE를 이용해 재귀 형식으로 임시 테이블을 생성할 수도 있습니다. 참고로 재귀 형식으로 표현할 때는 재귀 호출을 종료하는 조건이 포함되어 있어야 합니다.

WITH RECURSIVE cte(n) AS
(
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM cte 
  WHERE n < 5 -- 재귀 호출 종료 조건
)
SELECT * FROM cte;

Cost Model

Query Optimizer Takes Data Buffering into Account

MySQL 8은 데이터가 메모리에 있는지 혹은 디스크에 있는지 여부에 대한 지식을 기반으로 query plan을 선택합니다.

Optimizer Histograms

MySQL 8은 Histogram 통계를 구현합니다. Histogram을 사용하면 테이블의 컬럼에 대한 데이터 분포에 대한 통계를 생성할 수 있습니다. 일반적으로 인덱싱 되지 않은 컬럼에 대해 수행되며 최적의 query plan을 찾는데 query optimizer에서 사용됩니다.

OpenSSL by Default in Community Edition

MySQL 8은 OpenSSL을 MySQL Enterprise Edition과 Community Edition 모두를 위한 기본 TLS/SSL 라이브러리로 통합하고 있습니다.

Changes to Auto_Increment persistence

이전에는 Auto_Increment 카운터는 디스크가 아닌 메모리 상에만 보관되었기 때문에 서버가 재시작되면 이 카운터를 기화해야 했습니다. 하지만 MySQL 8에서는 카운터가 변경될 때마다 redo log를 매번 기록하고, 각 체크포인트를 관리하는 스토리지 엔진의 시스템 테이블에 해당 내용을 저장하게 되었습니다.

Functional Indexes

컬럼의 값 혹은 컬럼의 prefix 값이 아닌 '표현식 값을 인덱싱'하는 기능이 새롭게 지원되었습니다. Functional Key를 사용해 테이블에 직접 저장되지 않은 값을 인덱싱하는 기능입니다. 아래의 예시를 확인해보면 될 것 같습니다.

728x90

'DB' 카테고리의 다른 글

Elastic Search  (0) 2021.07.14
Dinstinct와 Group by의 차이  (0) 2021.05.03
SQL 작성 7거지악  (0) 2021.04.01
MySQL Storage Engine  (0) 2020.11.25
DB Cluster  (0) 2020.11.20