알쓸코지
article thumbnail
[MySQL] 문자열 패턴 매칭 연산자 (REGEXP, LIKE)
Backend/Database 2024. 2. 22. 20:37

MySQL에서 문자열 패턴 비교 연산자인 REGEXP, LIKE에 대해서 알아보고 자주 쓰이는 패턴에 대해서 정리해보고자 한다. 문자열 패턴 매칭 연산자 REGEXP 연산자 문자열 값이 어떤 패턴을 만족하는지 확인하는 연산자로, `RLIKE(Regular Expression)`와 동일한 역할을 수행한다. SELECT 'abc' REGEXP '^[x-z]'; 연산자의 좌측: 비교 대상(문자열 값 또는 문자열 칼럼) 연산자의 우측: 검증하고자 하는 정규 표현식 `REGEXP` 연산자는 정규 표현식을 토대로 하는 패턴 매칭 연산을 제공하는데, POSIX 표준으로 구현되어 있어 POSIX 정규 표현식에서 사용하는 패턴 키워드를 그대로 사용할 수 있다. POSIX? - Portable Operating Syste..

article thumbnail
[MySQL] 실행 계획 - partitions 칼럼
Backend/Database 2024. 2. 15. 22:37

Real MySQL 8.0 - 10.3.4 partitions 칼럼 부분을 공부하는데 파티션에 대한 이해도가 부족해서 설명이 완벽하게 이해되지 않았다. 그래서 해당 내용을 이해하기 위해 필요한 부분 위주로 간단히 정리해보고자 한다. 파티션이란? 대용량 테이블이나 인덱스를 작은 논리적 단위로 나누는 것 파티션 기능은 테이블을 논리적으로는 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리해서 관리할 수 있게 해 준다. 파티션이 필요한 경우는? 주로 대용량의 테이블을 여러 개의 소규모 테이블로 분산하는 목적으로 사용함 인덱스 크기가 과도하게 커질 때 인덱스가 커지면 SELECT 뿐만 아니라 INSERT, UPDATE, DELETE 작업도 함께 느려진다. `인덱스의 크기 > MySQL이 사용 가능한 메모..

article thumbnail
[MySQL] 히스토그램
Backend/Database 2024. 2. 7. 21:12

히스토그램(Histogram)이란? 칼럼의 데이터 분포를 시각적으로 나타내는 통계 정보로 MySQL 8.0 버전부터 사용 가능하다. 데이터의 빈도를 그룹화하여 각 그룹의 빈도를 막대그래프로 표시한다. 데이터의 분포를 빠르게 이해하고 이상치를 감지하는 데 도움이 되며, MySQL의 옵티마이저가 쿼리 실행 계획을 수립할 때 활용된다. 히스토그램 정보 수집 과정 1. 다음 명령을 실행하여 히스토그램 정보를 수동으로 수집 및 관리 (자동 수집 X) ANALYZE TABLE 테이블명 UPDATE HISTOGRAM ON 칼럼명; 2. 수집된 히스토그램 정보를 시스템 딕셔너리에 저장 3. MySQL 서버가 시작될 때 딕셔너리의 히스토그램 정보를 `information_schema` 데이터베이스의 `column_sta..

article thumbnail
[MySQL] Read Ahead에 대해서 알아보자
Backend/Database 2024. 1. 25. 23:02

InnoDB 스토리지 엔진은 특정 테이블의 연속된 데이터 페이지가 읽히면 백그라운드 스레드에 의해 리드 어헤드(Read ahead) 작업이 자동으로 시작된다. - Real MySQL 8.0의 9.2.1 책에서 리드 어헤드에 대해서 간단히 언급하고 지나갔는데, 더 자세히 알아보고 싶어서 정리하게 되었다. 풀 테이블 스캔 `풀 테이블 스캔(Full Table Scan)`은 인덱스를 사용하지 않고, 테이블의 데이터를 처음부터 끝까지 읽어서 요청된 작업을 처리하는 작업으로, 테이블의 레코드 건수가 너무 작거나 적절한 인덱스가 없을 때 이 방식을 사용한다. 풀 테이블 스캔 방식의 문제점은 테이블의 모든 행을 순차적으로 읽어오기 때문에 상당히 많은 디스크 I/O가 필요하다는 것인데, 대부분의 DBMS는 성능 최적화..

article thumbnail
[MySQL] B-Tree 알고리즘
Backend/Database 2024. 1. 18. 14:55

Real MySQL 8.0 - 8.3.2에서 인덱스 키 추가 및 삭제 과정에 대한 설명이 쭉 나와 있는데, 시각화된 자료가 없어서 동작 과정이 와닿지 않았다. 그러던 중 B-Tree Visualization이라는 좋은 사이트를 알게 되어서 직접 조작하여 눈으로 확인해보고자 한다. B-Tree란? 자식 노드의 개수가 2개 이상인 트리 하나의 노드가 최대 `M`개의 자식을 가질 수 있는 B-Tree를 `M차 B-Tree`라고 부른다. 각 노드는 최대 `M - 1`개의 key를 가질 수 있다. 노드의 데이터 수가 `N`개라면, 자식 노드의 개수는 `N + 1`개이다. 노드의 데이터는 항상 정렬된 상태여야 한다. 노드의 자식 노드들은 노드 데이터를 기준으로 더 작은 값을 왼쪽 서브 트리에, 더 큰 값들은 오른쪽..

article thumbnail
[MySQL] 암호화 알고리즘
Backend/Database 2024. 1. 11. 21:14

Real MySQL 8.0 - 7.1.1 2단계 키 관리에서 MySQL 서버의 TDE에서 지원되는 암호화 알고리즘에 대해 설명하였는데,이와 관련하여 몇 가지 궁금증이 있어서 작성하게 되었다. MySQL 서버의 TDE에서 지원되는 암호화 알고리즘은 AES 256 비트이며, 이외의 알고리즘은 지원되지 않는다. 테이블스페이스 키는 AES-256 ECB(Electronic CodeBook) 알고리즘을 이용해 암호화되고, 실제 데이터 파일은 AES-256 CBC(Cipher Block Chaining) 알고리즘을 이용해서 암호화된다. Q1. 다양한 암호화 알고리즘 중 왜 AES 256만 지원할까? Q2. 테이블스페이스 키는 AES-256 ECB, 실제 데이터 파일은 AES-256 CBC 알고리즘을 이용하여 암호화..