위토즈 - 개발자프로그램판매공간

정보공유

[SQL] 쿼리 성능 최적화

SELECT rm_ix, rm_date, rm_pos, rm_subject

FROM (SELECT COUNT(*) AS cnt, b.rm_ix, b.rm_subject FROM tblA as a inner join tblB as b on a.idx = b.idx where a.bk_status in ('대기', '완료') GROUP BY b.rm_ix, b.rm_date, b.rm_pos) AS GP

WHERE GP.cnt > 1

ORDER BY rm_date, rm_pos, cnt


를 아래와 같이 성능을 개선해서 사용가능하다.


1. 인덱스 최적화: tblA.bk_status, tblB.idx, tblB.rm_ix, tblB.rm_date 등에 적절한 인덱스를 추가.

2. 서브쿼리 제거: 현재 서브쿼리로 COUNT(*)를 계산한 후 필터링하는데, HAVING COUNT(*) > 1을 사용하면 불필요한 중첩을 줄일 수 있음.

3. JOIN 순서 최적화: g5_wb_booking을 먼저 필터링한 후 g5_wb_booking_location과 JOIN하면 불필요한 데이터 로딩을 줄일 수 있음.


SELECT 

    b.rm_ix, 

    b.rm_date, 

    b.rm_pos, 

    COUNT(*) AS cnt, 

    b.rm_subject

FROM tblA AS a

INNER JOIN tblB AS b 

    ON a.idx = b.idx

WHERE a.bk_status IN ('대기', '완료')

GROUP BY b.rm_ix, b.rm_date, b.rm_pos, b.rm_subject

HAVING COUNT(*) > 1

ORDER BY b.rm_date, b.rm_pos, cnt DESC;



개선 사항:

1. 서브쿼리 제거 → 직접 HAVING COUNT(*) > 1 사용하여 필터링.

2. 인덱스 활용 → tblA.bk_status 에 인덱스가 있으면 필터링 속도 증가.

3. 필요한 컬럼만 GROUP BY → 기존보다 더 많은 컬럼을 그룹핑해서 중복을 최소화.




인덱스를 확인하고 없으면 추가.


CREATE INDEX idx_booking_status ON tblA (bk_status);

CREATE INDEX idx_booking_location ON tblB (idx, rm_ix, rm_date, rm_pos);

정보공유
Total 27건 1 페이지
번호 제목 글쓴이 날짜 조회
열람중 쿼리 성능 최적화 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-07 536
26 mysql 사용자 함수 생성 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 01-09 4031
25 조건이 일치 하는 것은 앞으로 정렬하고 랜덤으로 출력하기. 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10-21 9553
24 데이터 검증 후 잘못된 처리일경우 롤백처리. (트랜젝션) 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 07-07 11090
23 mysql 생년월일로 나이 계산식 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-11 19966
22 중복키관리 ON DUPLICATE KEY UPDATE 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-13 12428
21 mysql FIND_IN_SET 함수 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-26 13066
20 phpMyAdmin 좌측 트리메뉴 테이블 갯수 설정 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 12-10 15726
19 MYSQL LOCK TABLES 내 별칭(AS) 사용 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11-25 15883
18 IN () 은 INNER JOIN 혹은 EXISTS로 사용하자 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-21 25034
17 중복된 데이터 정리하기 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-18 24042
16 mysql 근접한 값을 구하려 할때. 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 07-11 31776
15 wwwsqlDesigner 사용방법(2) 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-12 31691
14 wwwsqlDesigner 사용방법(1) 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-12 31590
13 게시물 조회수 랜덤으로 적용하기 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 12-01 33740