카테고리 없음

[DB] 진행하고 있는 프로젝트 인덱스 적용

배발자 2023. 2. 10.
반응형
 

[MySQL] 쿼리 성능확인하기

미니 프로젝트를 진행하면서 공공 데이터 사이트에서 제공하는 더미 데이터를 테이블에 넣었던 경험이 있는데 데이터가 2만개가 넘기 때문에 어떻게 하면 쿼리 성능을 최적화 시킬 수 있을까에

baebalja.tistory.com

해당 글을 읽기 전에 위의 글과 다음 글을 읽고 오는 것을 추천한다. 

 


 

현재 진행하는 프로젝트는 MariaDB 10.5를 사용하고 있으며 해당 DB 테이블 중 User Table은 고유한 PK값을 가지고 있으며 kakao_Id 컬럼에도 user의 고유한 kakao Id를 저장하고 있다.

 

필자가 진행한 프로젝트에서 kakao_id를 where절로 쓰이는 쿼리문이 자주 실행된다.

해당 쿼리문을 날릴 때 속도를 측정해보고 인덱스를 활용하여 쿼리 성능을 향상시켜보려고 한다. 

 

[100,000건  유저 데이터 삽입] : kakaoId는 고유한 값을 가지고 있다. 

# 프로시저명 : kakaoIdDummy

BEGIN
DECLARE i INT DEFAULT 1;
	WHILE (i <= 100000) DO 
	SET @kakaId = CONCAT('kakaoId', i); 
	insert into user (created_at, dong, email, gu, info, is_valid, kakao_id, ... 생략 )
	values  ('2023-02-01 15:11:54.268038', '논현동', 'test1@test.com', '강남구', 'hello I''m test1', TRUE, @kakaId, ... 생략 ); 
		SET i = i + 1;
	END WHILE;
END
#프로시저 호출
CALL kakaoIdDummy;

 

[100,000건 데이터 생성] 

 

 

# 인덱스 정보
SHOW INDEX FROM user;

 

최초 테이블 생성 시 PK를 기본 값으로 인덱스가 생성된다. 

 

#검색
SELECT * FROM user u WHERE u.kakao_id = "kakaoId33319";

#프로파일링
SHOW PROFILES;

 

Duration = 0.04011180 s

 


 

 

kakao_id 컬럼을 가진 인덱스를 하나 추가한다. 

 

* 인덱스 컬럼은 아무거나 설정하는 것이 아니다. 추후 포스팅 할 예정이지만 지금은 중복도가 낮은 데이터를 가진 컬럼에 적용했다 정도로 생각하자. 

# user 테이블의 kakao_id 컬럼을 인덱스로 가지는 kakaoIndex 생성
CREATE INDEX kakaoIndex ON user(kakao_id);

# 인덱스 정보
SHOW INDEX FROM user;

 

#검색
SELECT * FROM user u WHERE u.kakao_id = "kakaoId33319";

#프로파일링
SHOW PROFILES;

 

 

Duration = 0.00279450 s

 

15~20배 빨라졌다. 

 

반응형

댓글