테스트 사이트 - 개발 중인 베타 버전입니다

재 주문 횟수 조회 쿼리 채택완료

영카트5이용자 2년 전 조회 6,570

안녕하세요.

 

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개

채택된 답변
+20 포인트

서브쿼리대신 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 테이블의 필드와 인덱스는 실제 테이블 구조에 맞게 수정하시면 될 것 같습니다

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

원하시는 결과를 표로 한번 만들어 보세요.

원하시는 결과가 어떤 것인지 sql만으로는 알기 힘드네요.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

여기 오셔서 많은 얘기 나누면서 고민 해결에 도움이 되세요

https://open.kakao.com/o/gzNuQjhe

 

#

join에 대해서 좀 알아보시면 될것 같아요

 

https://t1.daumcdn.net/cfile/tistory/99219C345BE91A7E32" />

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

별명은별명
2년 전
단체톡방 정말 유익하네요!!

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인