인덱스

ELK

ElasticSearch 기초와 동작 과정

ElasicSearch 소개 검색 엔진 엘라스틱서치는 루씬 기반의 오픈소스 검색 엔진이다. 단순한 텍스트 매칭 검색이 아닌 full-text-search가 가능하며 다양한 종류의 검색 쿼리를 지원한다. 다양한 애널라이저를 조합해 여러 비즈니스 요구사항에 맞는 색인을 구성할 수 있고 형태소 분석도 가능하다. full-text-search란? (MongoDB 사이트 왈) 전체 텍스트 검색(full-text search)"은 전자적으로 저장된 방대한 텍스트 데이터에서 특정 텍스트를 검색하고, 쿼리에서 지정된 단어 중 일부 또는 전체가 포함된 결과를 반환하는 것을 의미합니다. 이에 비해 전통적인 검색은 정확한 일치만을 반환하는 것이 특징입니다. 분산 처리 엘라스틱 서치는 분산 처리를 고려하여 설계됐다. 데이터를..

Database/SQL 튜닝

NL 조인 쿼리 튜닝

이번에는 생애 처음으로 토이 프로젝트의 쿼리를 튜닝해보았습니다. 프로젝트에서 제일 많이 호출되는 쿼리를 튜닝했는데 그 경험을 적어보겠습니다. 쿼리 튜닝 환경 M1 air RAM 16GB, SSD 512GB Docker 컨테이너 Mysql 8.x 버전 다대다 관계 튜닝하기 project라는 테이블과 member라는 테이블은 다대다 관계다. 중간 관계 테이블로 project_member라는 테이블이 존재한다. 테스트 데이터는 MySQL 프로시저를 활용해서 주입했으며 데이터 갯수는 아래와 같다. member: 200만 project: 500만 project_member: 1400만 먼저 쿼리를 살펴보자. 내가 참여한 모든 프로젝트를 조회하는 쿼리다. 디스코드 사이드 바에서 내가 참여한 모든 채팅방을 보여줄 때..

Database/SQL 튜닝

인덱스 튜닝

1. 테이블 액세스 최소화 테이블 랜덤 액세스 인덱스 ROWID는 물리적 주소? 논리적 주소? 인덱스를 스캔하는 이유는, 검색 조건을 만족하는 소량의 데이터를 인덱스에서 빨리 찾고 거기서 테이블 레코드를 찾아가기 위한 주소 값, 즉 ROWID를 얻으려는 데 있다. 인덱스 ROWID는 물리적 주소보다 논리적 주소에 가깝다. 물리적으로 직접 연결되지 않고 테이블 레코드를 찾아가기 위한 논리적 주소 정보를 담고 있기 때문이다. ROWID는 프로그래밍에서 말하는 포인터가 아니며, 테이블 레코드와 물리적으로 직접 연결된 구조는 더더욱 아니다. 오라클 같은 경우는 테이블 블록이 수시로 버퍼캐시에서 밀려났다가 다시 캐싱되며, 그때마다 다른 공간에 캐싱되기 때문에 인덱스에서 포인터로 직접 연결할 수 없는 구조다. 메모..

Database/MySQL

클러스터링 인덱스

클러스터링이란 여러 개를 하나로 묶는다는 의미로 주로 사용되는데, 지금 설명하고 자하는 인덱스의 클러스터링도 그 의미를 크게 벗어나지 않는다. MySQL 서버에서 클러스터링은 테이블의 레코드를 비슷한 것(프라이머리 키를 기준으로)들끼리 묶어서 저장하는 형태로 구현되는데, 이는 주로 비슷한 값들을 동시에 조회하는 경우가 많다는 점에 착안한 것이다. MySQL에서 클러스터링 인덱스는 InnoDB 스토리지 엔진에서만 지원하며, 나머지 스토리지 엔진에서는 지원되지 않는다. 클러스터링 인덱스 클러스터링 인덱스는 테이블의 프라이머리 키에 대해서만 적용되는 내용이다. 즉 프라이머리 키 값이 비슷한 레코드끼리 묶어서 저장하는 것을 클러스터링 인덱스라고 표현한다. 여기서 중요한 것은 프라이머리 키 값에 의해 레코드의 저..

Debin
'인덱스' 태그의 글 목록