본문 바로가기

DataBase13

인덱스 간단 정리(개념, 인덱스컬럼 결정) 프로젝트 개발을 하면서 데이터베이스를 다루는 작업을 많이 하게 된다. 무작정 쿼리를 막 날리면 성능상 좋지 않다는 것을 느끼게 될 것이다. 데이터베이스 성능을 향상하는 것이 매우 중요한데 그중에서 인덱스(index)라는 것은 성능 향상에 있어서 필수적이다. 인덱스에 대해 간단하게 설명하자면 데이터들을 어떤 값들을 기준으로 데이터 블록을 나열한 목차라고 생각하면 된다. 아래의 사진을 한번 봐보자. 왼쪽의 표는 Content를 기반으로 생성한 인덱스, 오른쪽의 표는 테이블 생성 시 기본적으로 생성되는 Primary Index이다. 클러스터 인덱스라고도 하며 데이터의 위치를 결정하는 키 값이라고도 할 수 있다. 왼쪽의 Content 인덱스를 통해 Id를 알고 Id를 통해 데이터 주소로 가서 데이터를 조회하는 .. 2022. 4. 9.
인덱스의 유형과 특징(2. 함수기반 인덱스) 저번 글에서는 인덱스란 무엇인지와 종류, 그리고 B-tree인덱스에 대해서 간단하게 살펴보았다. 이 글에서는 이어서 함수 기반 인덱스에 대해서 살펴보겠다. 함수기반 인덱스는 말 그대로 함수를 기반으로 하는 인덱스이다. 인덱스 값을 단순히 컬럼이 아니라 컬럼을 이용한 연산으로 정한다는 것이다. 아래는 간단한 예시이다. CREATE INDEX prod_idx1 (cnt * price); 위와 같은 인덱스를 생성했을 때 아래와 같은 조건문으로 검색을 한다면 이미 인덱스가 만들어져 있으므로 더 빠른 성능을 보여줄 것이다. SELECT * FROM prod WHERE cnt * price = 2000; 함수 기반형 인덱스는 위에서의 경우 인덱스 키로 cnt * price의 값이 정해져 있고 각 값에 해당하는 RO.. 2022. 4. 2.
인덱스의 유형과 특징(1. B-Tree index) 인덱스는 우리가 테이블에서 특정한 칼럼을 기준으로 정렬을 미리 시켜놓은 목차 같은 개념이다. 그렇기에 인덱스를 지정한 컬럼을 대상으로 검색을 할 때에는 인덱스를 통해서 더 적은 비용으로 데이터를 찾을 수 있기에 성능 향상에 있어서는 인덱스는 필수적이다. 그렇다면 인덱스는 어떤 종류들이 있을까? B-Tree 인덱스, 리버스 키 인덱스, 비트맵 인덱스, 함수기반 인덱스가 있지만 이 글에서는 B-Tree 인덱스에 대해서만 설명을 하겠다. 클러스터 인덱스에 대해서는 https://khdscor.tistory.com/46 를 참고하길 바란다. 데이터 저장구조와 특징(클러스터링 팩터) 스프링 프로젝트를 하면서 최적화에 대한 문제를 여러 번 직면했다. api 횟수를 줄이는 문제, DB와의 통신 횟수를 줄이는 방식, .. 2022. 4. 1.
데이터 저장구조와 특징(클러스터링 팩터) 스프링 프로젝트를 하면서 최적화에 대한 문제를 여러 번 직면했다. api 횟수를 줄이는 문제, DB와의 통신 횟수를 줄이는 방식, N +1 문제, JPA 읽기 모드, 캐시, DB 검색 성능 향상(인덱스 및 join성능 향상 등), 정규화, 테이블 설계, 저장 등 매우 많은 방식이 존재한다는 것을 알았다. 그중에서 DB에 데이터를 저장하거나 검색을 할 때의 성능을 향상하기 위해 새로 쓴 대용량 데이터베이스 설루션 1이라는 책을 읽고 책의 내용을 정리하려고 한다. 일반적으로 인덱스와 테이블은 분리되어 있다. 테이블은 테이블 스페이스에 여러 블록에 저장되어 있고 각 로우(Row)들의 주소가 인덱스 키에 따라 테이블에서 지정한 칼럼들의 순서로 인덱스가 만들어지는 것이다. 여기서 문제는 각각의 로우는 여러 블록에.. 2022. 3. 30.