재 주문 횟수 조회 쿼리 채택완료
안녕하세요.
g5_shop_order 테이블에서 재주문 횟수를 구하는 쿼리를 생성하고 싶습니다.
mb_id가 있으면 mb_id를 기준으로 재 주문횟수를 구하고, mb_id가 없는(비회원) 주문은 od_hp를 기준으로 구하고 싶습니다.
아래 처럼 쿼리를 작성했는데, 속도가 느려서 조회가 안되는 상황입니다.ㅠㅠ
SELECT od_id, mb_id, od_time, ( SELECT COUNT(*) + 1 FROM g5_shop_order o2 WHERE ( (o.mb_id != '' AND o2.mb_id = o.mb_id) OR (o.mb_id ='' AND o2.od_hp = o.od_hp) ) AND o2.od_time <= o.od_time AND o2.od_id < o.od_id ) AS record_count FROM g5_shop_order o;
답변 3개
서브쿼리대신 JOIN을 사용할 수 있으며, 또한 필요한 필드만 선택하도록 쿼리를 최적화 해주는 것도 하나의 방법이라 생각합니다.
적절한 인덱스를 추가하여 조회 성능을 개선 할 수 있으며 g5_shop_order 테이블의 mb_id, od_hp, od_time, od_id 필드에 인덱스를 생성하는 것도 좋은 방법이라 생각합니다
예를 들어 아래와 같이 하시면 어느 정도 속도 개선에 도움 이 되지 않을까 합니다.
</p>
<p>SELECT
o.od_id,
o.mb_id,
o.od_time,
(
SELECT COUNT(*) + 1
FROM g5_shop_order o2
LEFT JOIN g5_shop_order o3 ON o3.mb_id = o.mb_id AND o3.od_time <= o.od_time AND o3.od_id < o.od_id
WHERE o2.mb_id = o.mb_id OR (o.mb_id = '' AND o2.od_hp = o.od_hp)
) AS record_count
FROM
g5_shop_order o
참고하셔서 g5_shop_order 테이블의 필드와 인덱스는 실제 테이블 구조에 맞게 수정하시면 될 것 같습니다
댓글을 작성하려면 로그인이 필요합니다.
댓글을 작성하려면 로그인이 필요합니다.
여기 오셔서 많은 얘기 나누면서 고민 해결에 도움이 되세요
https://open.kakao.com/o/gzNuQjhe
#
join에 대해서 좀 알아보시면 될것 같아요
https://t1.daumcdn.net/cfile/tistory/99219C345BE91A7E32" />
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인