재 주문 횟수 조회 쿼리 채택완료
안녕하세요.
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 필드에 인덱스를 생성하는 것도 좋은 방법이라 생각합니다
예를 들어 아래와 같이 하시면 어느 정도 속도 개선에 도움 이 되지 않을까 합니다.
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
참고하셔서 g5_shop_order 테이블의 필드와 인덱스는 실제 테이블 구조에 맞게 수정하시면 될 것 같습니다
댓글을 작성하려면 로그인이 필요합니다.
원하시는 결과를 표로 한번 만들어 보세요.
원하시는 결과가 어떤 것인지 sql만으로는 알기 힘드네요.
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인