조인관련문의 0 5 519

by 날아라! [MySQL] [2018.08.28 15:36:32]


select a.product_id
	 , a.prm         -- 상품명
	 , a.price       -- 가격
     , a.asnum
	 .
	 .
	 .
    from mk_product a, mk_category b
 where a.product_id != '
    and wc.product_id = a.product_id
  order by a.sort desc, a.product_id desc

안녕하세요.

기존에 만들어져있던 사이트에 조인 및 속도등의 문제가 있어 문의를 드리고자합니다.

테이블은 상품테이블(mk_product)과 카테고리 테이블(mk_category)로 되어있습니다.
현재 상품이 54만건정도 업로드되어있네요.

속도가 너무나도 늦어져 확인해보니.
상품리스트가 while문을 통해서 뿌려지고있는데요.
그 while문안에 다른테이블의 상품as정보(mk_product_as)를 가져오고있네요.
mk_product_as테이블의 idx값과 해당상품에 등록된 as접수건등을 카운팅해서 가져옵니다.

여쭤보고싶은건 정상적으로 리스트가 출력이 되면서 mk_product, mk_category에 mk_product_as를 조인해서
원하는 정보를 가져올수있는지 문의를 드립니다.

조언 부탁드립니다 ㅡㅡ
질문이 좀 횡설수설하네요.

 

by 마농 [2018.08.28 16:18:42]

while 문 안의 쿼리도 보여주세요.


by 날아라! [2018.08.28 16:25:18]

안녕하세요.

select count(idx) as as_cnt, idx
  from mk_product_as
 where asnumber = '$row->asnum'
   and assubject = '$row->prm'
 

위와같이 구성이 되어있습니다.


by 마농 [2018.08.28 16:40:33]
-- 그룹바이 후 조인
SELECT a.product_id
     , a.prm
     , a.price
     , a.asnum
     , ...
     , c.as_cnt
     , c.as_idx
  FROM mk_product  a
 INNER JOIN mk_category b
    ON a.product_id  = b.product_id
  LEFT OUTER JOIN
       (SELECT asnumber, assubject
             , COUNT(*) as_cnt
             , MIN(idx) as_idx
          FROM mk_product_as
         GROUP BY asnumber, assubject
        ) c
    ON a.asnum     = c.asnum
   AND a.assubject = c.assubject
 WHERE a.product_id != ''
 ORDER BY a.sort DESC, a.product_id DESC
;

 


by 날아라! [2018.08.28 16:57:53]

답변감사합니다.

 

알려주신 쿼리문을 참조해보았는데 속도가 더 느려졌습니다 ㅡㅡ

아...무엇이 문제인지...인덱스를 잘못잡아서 그런건지...

알수가없네요^^

 

도움 많이 되었습니다.


by 마농 [2018.08.28 17:24:17]
-- 스칼라서브쿼리 --
SELECT a.product_id
     , a.prm
     , a.price
     , a.asnum
     , ...
     , (SELECT COUNT(*) as_cnt
          FROM mk_product_as c
         WHERE c.asnum     = a.asnum
           AND c.assubject = a.assubject
        ) as_cnt
     , (SELECT MIN(idx) as_idx
          FROM mk_product_as c
         WHERE c.asnum     = a.asnum
           AND c.assubject = a.assubject
        ) as_idx   -- idx 항목이 꼭 필요한건지 의문?
  FROM mk_product  a
 INNER JOIN mk_category b
    ON a.product_id  = b.product_id
 WHERE a.product_id != ''
 ORDER BY a.sort DESC, a.product_id DESC
;

-- 조인 후 그룹바이 --
SELECT a.product_id
     , a.prm
     , a.price
     , a.asnum
     , ...
     , COUNT(c.idx) as_cnt
     ,   MIN(c.idx) as_idx
  FROM mk_product  a
 INNER JOIN mk_category b
    ON a.product_id  = b.product_id
  LEFT OUTER JOIN mk_product_as c
    ON a.asnum     = c.asnum
   AND a.assubject = c.assubject
 WHERE a.product_id != ''
 GROUP BY a.product_id
     , a.prm
     , a.price
     , a.asnum
     , ...
 ORDER BY a.sort DESC, a.product_id DESC
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입