본문 바로가기

index4

스프링부트 With Mysql - easyRandom을 통한 bulk Insert 및 Index 적용 이 글은 개인적인 생각을 작성한 것이다. 들어가기 데이터베이스에 대해 공부하다 보면 마주치는 것 중 인덱스라는 것을 들어보았을 것이다. 필자 또한 인덱스라는 개념을 책 및 인터넷을 통해 많이 접하았다. 쿼리 최적화에 대해 공부하면서 인덱스 또한 공부도 하였다. 하지만 인덱스를 통해 충분한 성능을 보기 위해서는 충분한 데이터가 있어야 한다고 들었다. 그래서 데이터가 많지 않으니까 다음에 적용하자~! 라는 핑계로 계속 인덱스를 직접 적용해 보는 것을 미뤘었다. 그러던 중 최근에 EasyRandom을 통한 랜덤한 객체를 수백만 건을 생성해 주는 방법을 접하게 되었다. 지금까지 진행하던 테스트에서는 일일이 값을 집어넣어서 객체를 생성하고 테스트를 진행하였다. EasyRandom은 이런 나에게 매우 매혹적으로 보.. 2023. 8. 3.
DB - 결합인덱스 및 컬럼 순서 결정 방법 데이터 베이스를 다루면서 성능 향상을 위해 인덱스의 사용과 개념은 전 페이지에서 설명하였다. 특정 컬럼을 기준으로 정렬해 놓은 목차 같은 것이라고 할 수 있고 분류 대상과 분류 정보를 분리했을 때 분류 정보가 인덱스라고 할 수도 있다. 여기서 확인할 것은 특정 컬럼이 하나가 아닐 수 있다는 것이다. 이것은 여러 개의 인덱스를 만든다는 말이 아니라 하나의 인덱스에 여러 컬럼이 기준이 될 수 있다는 것이다. 이것이 바로 결합 인덱스이다. 이 글에서는 결합인덱스에 대해 간단히 설명하고 컬럼 선정 방법에 대해서도 설명할 것이다. 참고로 '개발자를 위한 인덱스 생성과 SQL 작성 노하우(이병국)'을 참고하여 작성하였다. 결합 인덱스는 하나의 인덱스에서 기준 컬럼이 하나가 아닌 인덱스이다. 결합 인덱스 1= 컬럼1.. 2022. 4. 10.
인덱스 간단 정리(개념, 인덱스컬럼 결정) 프로젝트 개발을 하면서 데이터베이스를 다루는 작업을 많이 하게 된다. 무작정 쿼리를 막 날리면 성능상 좋지 않다는 것을 느끼게 될 것이다. 데이터베이스 성능을 향상하는 것이 매우 중요한데 그중에서 인덱스(index)라는 것은 성능 향상에 있어서 필수적이다. 인덱스에 대해 간단하게 설명하자면 데이터들을 어떤 값들을 기준으로 데이터 블록을 나열한 목차라고 생각하면 된다. 아래의 사진을 한번 봐보자. 왼쪽의 표는 Content를 기반으로 생성한 인덱스, 오른쪽의 표는 테이블 생성 시 기본적으로 생성되는 Primary Index이다. 클러스터 인덱스라고도 하며 데이터의 위치를 결정하는 키 값이라고도 할 수 있다. 왼쪽의 Content 인덱스를 통해 Id를 알고 Id를 통해 데이터 주소로 가서 데이터를 조회하는 .. 2022. 4. 9.
데이터 저장구조와 특징(클러스터링 팩터) 스프링 프로젝트를 하면서 최적화에 대한 문제를 여러 번 직면했다. api 횟수를 줄이는 문제, DB와의 통신 횟수를 줄이는 방식, N +1 문제, JPA 읽기 모드, 캐시, DB 검색 성능 향상(인덱스 및 join성능 향상 등), 정규화, 테이블 설계, 저장 등 매우 많은 방식이 존재한다는 것을 알았다. 그중에서 DB에 데이터를 저장하거나 검색을 할 때의 성능을 향상하기 위해 새로 쓴 대용량 데이터베이스 설루션 1이라는 책을 읽고 책의 내용을 정리하려고 한다. 일반적으로 인덱스와 테이블은 분리되어 있다. 테이블은 테이블 스페이스에 여러 블록에 저장되어 있고 각 로우(Row)들의 주소가 인덱스 키에 따라 테이블에서 지정한 칼럼들의 순서로 인덱스가 만들어지는 것이다. 여기서 문제는 각각의 로우는 여러 블록에.. 2022. 3. 30.