[트러블 슈팅] ⚠️ 게시글 검색 및 페이지네이션 슬로우 쿼리
·
프로젝트 트러블 슈팅 및 몰랐던점 정리/CommunityAPI
자유 게시판 프로젝트 진행 중 검색 기능을 구현한 뒤였다. 해당 프로젝트에는 더미데이터 약 2000천만건이 들어가 있었고, 게시글 첫 페이지 조회 시에만 해도 5초 이상이 걸리며 만약 맨 마지막 페이지의 컨텐츠를 확인하기 위해서 limit 20에 offset 20000000을 주게 될 경우 타임아웃이 발생하는 에러를 마주하게 되었다.... 이는 MySQL의 물리 디스크에 접근하여 데이터를 찾는데 그만큼 오래 걸린다는 것인데 이를 해결하기 위해서는 인덱스 생성이 필요해 보였다.문제 원인 파악원인을 파악하기 위해서 EXPLAIN 명령어로 해당 쿼리를 분석.확인 결과 type이 ALL인 것을 확인했다. 이는 쿼리가 인덱스를 사용하지 않고 풀 테입블 스캔을 하고 있음을 의미한다.게다가 총 1987만건의 데이터에..
[MySQL] MySQL 성능 개선의 핵심, 인덱스 이해하기
·
DB/SQL
인덱스란?특정 컬럼을 기준으로 데이터를 빠르게 조회하기 위해 사용하는 자료구조이다. 일반적으로 인덱스는 B-Tree 구조로 구성되어있어 이진 탐색 방식을 활용하여 데이터를 검색하는 방식이다.인덱스를 생성하면 원본 테이블을 기준으로 새롭게 정렬된 노드 형태를 띄게되며, 자신이 정한 특정 컬럼값들만 저장하고, 그 값이 있는 row를 가리키는 포인터를 가지게 된다. CREATE INDEX idx_salary ON employee(salary);위와 같은 인덱스를 생성할 경우 아래와 같은 B-Tree 구조를 띄게 된다.salary를 기준으로 정렬된 인덱스 테이블이 생기게 되는 것이아니라 노드 구조를 생성한다는 것이다.각 노드에는 salary 값만 들어있게 되고 각 leaf 노드에는 실제 row의 주소 또는 실제..
cheolhyeon
'쿼리 튜닝' 태그의 글 목록