SQL 최적화 > DBMS 내부에서 프로시저를 작성하고 컴파일해서 실행 가능한 상태로 만드는 전 과정 SQL 튜닝을 하기 위해서 SQL에 대한 이해와 SQL 옵티마이저가 어떻게 SQL을 처리하는지, 서버 프로세스에서는 데이터를 어떻게 읽고 저장하는지 이해할 필요가
RDBMS 관련된 실습을 진행하기 위해 더미데이터를 만드려고 합니다. DB, MySQL 관련 실습하는데 필요하신 분들이나 더미데이터 필요한데 시간 아끼고 싶은 분들은 그대로 가져다 쓰시면 될 것 같습니다.기본 테이블 생성 및 테이블간 제약관계만 생성하고 인덱싱같은 부분
앞서 쿼리 튜닝을 위해 MySQL의 쿼리 실행 계획을 해석하고 인덱스를 설정해서 병목을 해결해보았다. 이처럼 직관적으로 cost나 병목이 보 데이터가 디스크에 어떻게 저장이 되고, 어떤 식으로 읽어오는지에 대한 이해가 있어야 인덱싱을 남발하지 않고 쿼리 튜닝의 근거(
이전 포스팅에서는 쿼리 튜닝의 목적(무엇을 해결해야 하는지)에 대해서 알아보았다. 이번에는 쿼리 튜닝이 병목을 어떻게 해결하는지에 대해서 알아보려고 한다. 데이터를 찾는 방법 앞서 쿼리 튜닝이 무엇을 해결해야 하는지에 대해 다음과 같은 결론을 낼 수 있었다. 버퍼
이전 포스팅에서 쿼리 튜닝으로 SQL 병목을 해결하는 원리까지 알아보았는데, Table full scan과 Index range scan을 적절하게 사용해 논리적 I/O를 줄여서 디스크 I/O의 수를 간접적으로 줄이는 것이 목적이였다. 단순한 Table full sc
최근 DB에 대한 공부를 진행하면서 JPA-DB 양쪽 도메인에 대한 지식 수준을 맞추는 것이 중요하다고 느꼈다. 관계형 데이터베이스와 객체지향 프로그래밍의 패러다임 차이는 분명하고, 두 패러다임 각각 장단점이 뚜렷하기 때문에 이를 절충할 수 있는 JPA에 대한 공부 또
이전 포스팅들의 예제들은 모두 정렬 연산을 생략하는 것에 초점이 맞춰져 있었다. ORDER BY 절에 사용된 컬럼의 인덱스가 있을 경우, 인덱스는 항상 정렬된 상태를 유지하기 때문에 해당 정렬 연산을 생략할 수 있다. 이를 통한 비용 절감이 이루어지는 것은 자명한 사실
이전 포스팅들을 통해서 인덱스에 대한 전반적인 이해를 마쳤다. NL 조인은 이 인덱스를 활용한 조인 방식인데, 인덱스에 대한 이해가 따끈따끈한 시점에 공부를 해보면 좋을 것 같아서 이번 포스팅에서 다뤄보려고 한다.NL 조인은 앞서 말했듯이, 인덱스를 활용한 조인으로 이
이전 포스팅에서는 NL 조인에 대해서 알아보았다. NL 조인의 경우, 조인 컬럼에 대해 인덱스가 있는 환경에서 작동하기 때문에 탐색 대상 데이터가 많을 수록 성능이 나빠지게 된다.(랜덤 I/O가 많아지기 때문에) 이런 단점을 해결하기 위해 소트 머지 조인과 해시 조
얼마 전에, 한 개발자 친구가 MySQL + JPA로 멀티 스레드 환경에서 동일한 자원에 대한 트랜잭션을 처리할 때, 데이터 일관성 테스트를 하던 중에 데드락이 발생하여 이 문제를 해결하기 위해 고민한 적이 있었다. 고민을 하면서 느낀 것은, 내가 이 문제에 대해서
MySQL의 정렬 MySQL의 정렬 방식은 크게 두 가지로 나뉜다. 인덱스를 이용한 정렬 filesort 1번의 경우, 인덱스의 특성을 이용해 정렬 연산을 생략할 수 있는데, 이는 다음 포스팅에서 다루려고 한다. 이번 포스팅에서는 2번 정렬 방식인 filesort
이전 포스팅에서 filesort와 filesort 발생시 문제점에 대해서 알아보았다. 이번 포스팅에서는 정렬 연산을 생략하기 위해 인덱스를 활용하는 방법을 알아보려고 한다.결론부터 말하자면, ORDER BY 조건 컬럼에 인덱스를 생성해서 정렬 연산을 생략할 경우, 부분
이전까지는SELECT 쿼리에 관련된 내용을 중점적으로 다루었다면, 이번 포스팅부터 DML(UPDATE, DELETE, INSERT)튜닝에 관련된 내용을 다루고자 한다. DML 튜닝을 하기에 앞서, 이번 포스팅에서는 DML의 성능에 영향을 미치는 요소가 무엇인지, 어떻게
이전 포스팅에서 DML(UPDATE, INSERT, DELETE)의 성능에 영향을 미치는 요소 중, 다루지 않았던 요소들을 이해하고, 왜 DML의 성능에 영향을 미치는지 알아보았다. 크게 정리했을 때 DML의 성능에 영향을 미치는 요소는 크게 다음과 같다. 인덱스 무
이전 포스팅에서 대량 INSERT 문을 튜닝하는 방법에 대해서 알아보았다. 또 Lock과 트랜잭션, 그리고 트랜잭션 격리 수준에 대해서 포스팅한 적이 있는데 이를 적용한 실습을 진행하지 않았으며, INSERT 튜닝에서도 다루지 않았기 때문에 커밋과 Lock을 활용한 I