반응형
해당 글을 읽기 전에 위의 글과 다음 글을 읽고 오는 것을 추천한다.
현재 진행하는 프로젝트는 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배 빨라졌다.
반응형
댓글