본문 바로가기
  • 평범한 나의 개발공부 일지
나의 개발 기록/MariaDB

[MariaDB] 데이터가 많은 테이블끼리 join하여 select 할때 timeout 되어 조회가 되지않는 현상

by 블랑 블랑 2023. 2. 3.
반응형

학생테이블 약 40,000건 / 학생결제이력테이블 약 90,000건

 

학생 테이블에는 학생에 대한 정보가 들어있고,

결제이력테이블은 말그대로 학생이 결제를 했을때마다 한줄한줄 쌓이는 이력 정보가 들어있다.

이 두 테이블을 join하여 두가지 테이블의 있는 정보를 select문으로 한번에 조회하고 싶을때

약 40,0000 * 90,0000 이라는 횟수만큼 조회를 해야하기때문에 당연히 과부하가,,, 와서

timeout 이 발생하고 원하는 데이터를 조회할수가 없다.. 😅

 

select *
from 
sdet_info as sdet
left join 
sdet_pay_log as pay
on sdet.sdet_id = pay.sdet_id

이와같은 단순한 sql 문도 join을 하게되면

학생테이블에 있는 데이터 한줄 돌때 결제이력 테이블 90,000번을 돌아야 한다 ,, 이걸 40,000번 더?

 

이럴때 빠르게 조회할수 있는 아주 간단한 방법이 있다!

join에서 join조건을 sdet_id를 기준으로 넣었기때문에

기준테이블(학생)이 아닌 join하고자 하는 테이블(이력)의 sdet_id 컬럼에 index키만 넣어주면 끝난다

ALTER TABLE `sdet_pay_log` ADD INDEX `SDET_ID` (`SDET_ID`);

왜 빨라졌냐 ~ 하면?

쉽게 설명하자면 어떤 한 단어를 찾을때 사전에서 처음부터 끝까지 하나씩 다 대조하며 찾아보는것보다

사전에 ㄱ,ㄴ,ㄷ,ㄹ … 인덱스가 있으면 찾기 더 빠르고 쉽다라고 생각하면 이해가 쉬울것같다 

후자가 인덱스키 넣어준것임 !

 

 

 

(DB관리 툴 : HeidiSQL)

전 :

1분이상 > 렉걸림 > 조회안됨

 

후 :

약 3초 !

엄청난 차이다,,,,,,

이거 때문에 꽤나 고생했다 🙄🙄🙄

반응형

댓글