4개의 테이블을 가지고 페이징을 해야 하는데
첫번째 페이지는 조회가 되는데 2번째 페이지쪽은 쿼리 시간이 오래 걸리네요
주문할때 해당 업체가 특정기간내에 많이 주문한 물품 순으로 정렬을 해줘야 합니다.
기본제품 테이블(Product)이 있고 기간별로 가격이 달라질 수 있기 때문에
기본제품테이블을 기준으로 특정기간별로 Group_Product 테이블이 생성됩니다.
실제 주문은 Group_Product 에 있는 가격을 기준으로 주문이 되는거죠
Product : 기본제품 테이블
Order : 주문테이블
Order_Product : 주문제품테이블
Group_Product : 특정기간내 제품정보
많이 주문한 물품순으로 정렬을 해야 되서
Order테이블과 Order_Product 테이블을 join 시킵니다.
이 테이블은 계속 쌓이므로 1000개만 가져오도록 제한시켰습니다.
결국 총 4개의 테이블을 가지고 조회를 합니다.
한 페이지에 8개만 가져오는데도 속도 문제가 있네요
아래 쿼리는 페이징 쿼리는 제외하고 실제 데이타만 가져오는 부분입니다.
특정기간내제품정보번호 는 상단에서 기간으로 조회를 해서 가져옵니다.
select top 8 a.product_number, d.idx, d.product_cost from
Product_Copy a inner join (select idx, p_number,
product_cost from Group_Product where grp_idx=특정기간내제품정보번호) d on a.product_number=d.p_number left outer join (select top 1000 p_number from Order a inner join Order_Product b on a.idx=b.order_idx
and trans_date>='2013-09-17' and trans_date<='2013-11-17 23:59' and mng_agency_idx=업체번호
group by p_number order by sum(p_ea) desc, max(p_name)) c on a.product_number=c.p_number order by product_name
통계DB를 따로 만들어야 될까요?
현재 운영중인 사이트라 따로 만들기가 힘들것 같아서
현재 쿼리에서 어떤식으로 바꾸면 효율이 더 좋을까요?
도움 부탁 드립니다.
기준이 되는 테이블 주문관련 테이블 2개를 가지고 먼저 페이징을 하시고 그 결과를 가지고
서브쿼리로 날려도 훨씬 빠를듯 합니다.
제품테이블과 아웃조인 걸 이유는 없을듯 하네요....