재 주문 횟수 조회 쿼리
본문
안녕하세요.
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 <= 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만으로는 알기 힘드네요.
답변을 작성하시기 전에 로그인 해주세요.