본문 바로가기

MariaDB11

MySQL Update Subquery 성능 비교 (ver.5.6) 지난 포스팅으로 select ~ where in (서브쿼리)와 같은 서브쿼리가 MySQL 5.6 버전에서 대폭 최적화 되었음을 확인하였는데요. 이번에는 update (update ~ where in (서브쿼리)) 에서도 서브쿼리 최적화가 잘 작동하는지 확인해보겠습니다. 0. 테스트 환경 테스트 환경은 이전 select 테스트때와 같습니다. 메인 테이블 100만건 서브 테이블1 (인덱스 O) 1000건 서브 테이블2 (인덱스 X) 1000건 DDL 쿼리는 다음과 같습니다. 메인 테이블 -- 업데이트 대상 테이블 create table main_table ( id int not null auto_increment, target_id int not NULL, primary key (id) )ENGINE=Inn.. 2020. 9. 1.
MySQL where in (서브쿼리) vs 조인 조회 성능 비교 (5.5 vs 5.6) MySQL 5.5에서 5.6으로 업데이트가 되면서 서브쿼리(Subquery) 성능 개선이 많이 이루어졌습니다. 이번 시간에는 MySQL 2개의 버전 (5.5, 5.6) 에서 서브쿼리를 통한 조회 (Select)와 Join에서의 조회간의 성능 차이를 비교해보겠습니다. MySQL의 정석과도 같은 Real MySQL 책이 MySQL 5.5 버전을 기준으로 하다보니 5.6 변경분에 대해서 별도로 포스팅하게 되었습니다. 0. 테스트 환경 테스트용 테이블은 2개를 만들었습니다. 메인 테이블 100만건 서브 테이블1 (인덱스 O) 1000건 서브 테이블2 (인덱스 X) 1000건 DDL 쿼리는 다음과 같습니다. 메인 테이블 -- 업데이트 대상 테이블 create table main_table ( id int not .. 2020. 8. 27.
2. 커버링 인덱스 (WHERE + ORDER BY / GROUP BY + ORDER BY ) 지난 시간에 이어 이번엔 ORDER BY에 대해 알아보겠습니다. 2-1. WHERE + ORDER BY 일반적으로 ORDER BY 의 인덱스 사용 방식은 GROUP BY와 유사합니다만, 한가지 차이점이 있습니다. 바로 정렬 기준입니다. MySQL에서는 인덱스 생성시 컬럼 마다 asc/desc 를 정할수 있는것 처럼 보입니다. (젯브레인사의 DataGrip으로 인덱스 생성시 가능한 것처럼 보입니다만… 안됩니다.) 하지만 8.0 이전 버전까지는 지원하지 않습니다. 8.0 이전 버전까지는 문법만 지원되고 실제로 Desc 인덱스가 지원되는 것은 아닙니다. 단지 Ascending index 으로 만들어진 인덱스를 앞에서부터 읽을 것인지 (Forward index scan), 뒤에서부터 읽을 것인지 (Backwar.. 2020. 2. 29.
1. 커버링 인덱스 (기본 지식 / WHERE / GROUP BY) 일반적으로 인덱스를 설계한다고하면 WHERE절에 대한 인덱스 설계를 이야기하지만 사실 WHERE뿐만 아니라 쿼리 전체에 대해 인덱스 설계가 필요합니다. 인덱스의 전반적인 내용은 이전 포스팅을 참고하시면 좋습니다. 인덱스는 데이터를 효율적으로 찾는 방법이지만, MySQL의 경우 인덱스안에 포함된 데이터를 사용할 수 있으므로 이를 잘 활용한다면 실제 데이터까지 접근할 필요가 전혀 없습니다. 이처럼 쿼리를 충족시키는 데 필요한 모든 데이터를 갖고 있는 인덱스를 커버링 인덱스 (Covering Index 혹은 Covered Index) 라고합니다. 좀 더 쉽게 말씀드리면 SELECT, WHERE, ORDER BY, GROUP BY 등에 사용되는 모든 컬럼이 인덱스의 구성요소인 경우를 얘기합니다. 1-1. 커버링.. 2020. 2. 16.
MySQL (MariaDB) 인덱스 컨디션 푸시다운 팀에서 운영중이던 시스템에서 전반적인 성능 개선작업을 진행중 특정 쿼리의 실행 계획에서 Using index condition 값을 Extra 항목에서 보게 되었습니다. 커버링 인덱스 (Using index) 와는 어떤점이 다른지 정리하던 중, 인덱스 컨디션 푸시 다운 (ICP: Index Condition Pushdown)에 대해 알게되어서 정리하게 되었습니다. 커버링 인덱스도 정리중입니다. 혹시 정리되기전에 알고싶으신분들은 성동찬님이 작성하신 글을 참고해보세요. MariaDB 5.3 이상 혹은 MySQL 5.6 버전 이상부터 도입된 인덱스 컨디션 푸시 다운에 대해 간단하게 테스트로 확인해보겠습니다. 최근에 MariaDB를 설치하신 분들은 다 10.x 버전을 쓰실거라 기본으로 해당 옵션이 ON되어있을겁.. 2020. 2. 9.
Xtrabackup으로 DB 복구하기 Xtrabackup으로 백업된 데이터를 DB에 복구 시키는 과정을 진행해보겠습니다. 이 과정은 2대의 DB 서버가 있다는 가정하에 진행합니다. 1번 DB는 실제 운영 DB이며, 매일매일 Xtrabackup으로 백업 파일을 생성합니다. 2번 DB는 운영 DB가 장애나서 급하게 공수한 서버이며, MariaDB만 설치된 상태입니다. 즉, 깡통 상태입니다. 깡통 서버에서 MariaDB를 설치하는 방법은 이전 포스팅을 참고해주세요. 아래부터 실행되는 모든 명령은 root 계정으로 실행합니다. 즉, ec2-user, centos 등의 계정에서 root 계정으로 전환합니다. sudo su - root 그럼 차례로 진행해보겠습니다. 1. 백업 파일 다운로드 먼저 백업 파일을 저장할 백업 디렉토리로 이동합니다. 저는 /.. 2019. 12. 28.