로직과의 사투/DB

    쿼리튜닝 겉핥기 - 인덱스의 사용 (MySQL위주)

    MySQL 공식 도큐먼트의 설명에 의하면 SELECT절의 성능을 향상시키는 가장 좋은 방법은 하나 또는 하나 이상의 컬럼의 인덱스를 만들어 주는 것으로 언급하고있다. 그렇기 때문에 어떤 컬럼을 인덱스화 시키고 어느 구절에 인덱스 컬럼을 사용하는 것이 좋은지 잘 파악하고 사용하는 것이 중요할 것이다. 인덱스는 특정 Columns에 맞는 Rows 찾을 때 사용 된다. 만약 인덱스가 없다면 MySQL에선 첫 행 부터 쭉 읽으며 전체 테이블을 훑을 텐데, 이는 테이블이 커지면 커질 수록 그 비용이 증가하는 현상을 초래한다. 1. WHERE 절에서의 인덱스 사용 인덱스를 사용의 이유를 가장 손쉽게 깨달을 수 있는게 WHERE 절에 사용되는 Columns가 아닌가 싶다. 그러나 WHERE 절에 사용되는 컬럼을 무조..

    쿼리튜닝 겉핥기 - 인덱스란?

    지난 번 옵티마이저에 대해 알아본 것에 이어 이번엔 DBMS의 인덱스를 정리하고자 한다. 1. 인덱스(Index) 란? 인덱스는 DBMS에서 조회 성능을 높이기 위한 기술이다. 데이터베이스에서 인덱스는 조회 성능을 높이기 위해서뿐만아니라 유니크나 프라이머리 키 제약과 같은 제약 조건을 구현하기 위해서도 사용된다. 그렇기 때문에 인덱스에 대한 이해를 빼고선 데이터를 잘 다룰 수 없다. 2. 인덱스의 저장 구조 및 관리 인덱스 또한 데이터이므로 별도의 인덱스 페이지로 관리된다. 인덱스 페이지는 B-Tree로 관리된다. B-Tree는 따로 더 공부가 필요한 부분이라 자세한 사항은 나중을 기약하기로 하고, 간단하게만 보자면 B-Tree는 기본이 되는 루트 노드를 중심으로 노드들이 하위로 연결되어 있으며, 어떤 ..

    쿼리튜닝 겉핥기 - 개요, 옵티마이저

    회사에서 쿼리를 짜다보면서 쿼리의 성능이 떨어지는 걸 자주 경험하게 되었다. 그로 인해 자연스럽게 쿼리 튜닝에 대한 고민을 시작했고 조금씩이라도 쿼리 튜닝을 공부하기 시작했다. 그러나 쿼리 튜닝에 대해 계속 알아볼때마다 너무 깊고 무궁무진함을 느꼈고 이렇게 블로그에 글 몇 자로라도 정리의 필요성을 느껴 정리를 시작하게 되었다. 개인적인 공부를 위한 글이다보니 틀린 부분, 잘못 알고있는 부분이 있을 것이라 사료됩니다. 혹시나 이 글을 보시는 분들이 있으시다면 편하게 지적해주시면 감사하겠습니다. 1. 옵티마이저란? 쿼리 튜닝에 대해 알기 전에 먼저 선행 지식으로 갖춰야할 것 중 하나가 옵티마이저이다. 옵티마이저란 DBMS의 내부 엔진으로 SQL을 가장 효율적인 최적의 실행 방법을 결정하는 역할을 수행한다. ..