쿼리문 0 2 829

by 호야별리 [SQL Query] [2021.06.15 21:44:34]


1_query.png (8,144Bytes)
2_query.png (8,159Bytes)

안녕하세요.

쇼핑몰 작업을 진행하고 있는데요.

쿼리문을 이렇게도 구성해보고 저렇게도 구성해보면서 구현을 진행 하고 있습니다.

아래 2가지 방법으로 구성해서 테스트를 해보았는데요. 실질적으로 explain를 처리해보면 .extra부분에 구성되어지는 부분이 틀린데 그이유가 궁금하네요

어떤형태의 쿼리로 구성을 해야 옮게 진행되는것인지 고수님들의 조언부탁드립니다.

테이블은 2개로 구성되어 조인을 하고있습니다. (장바구니 테이블과 상품테이블입니다.

첨부파일은 explain했을때 나온 화면입니다.

 

1번쿼리

EXPLAIN SELECT x.ca_idx
     , x.ca_prdno
     , x.ca_prdname
     , x.ca_prdimg
     , x.ca_opt_idx
     , x.ca_opt_amount
     , y.prd_pur_type
     , y.prd_min_qty
     , y.prd_max_qty
     , y.prd_stock
     , y.prd_coupon_use
  FROM mkw_cart_temp AS X                                       // 장바구니테이블
  INNER JOIN shop_product AS Y                           // 상품테이블
    ON x.ca_prdno = y.prd_no
 WHERE x.ca_id = 'e59df6010a5765549f975003d672170b'    //-- 고객아이디
   AND x.ca_direct = 'basket'                                         //-- 장바구니 구분자형태
 ORDER BY x.ca_idx ASC

 

2번 쿼리

 EXPLAIN SELECT x.ca_idx 
     , x.ca_prdno 
     , x.ca_prdname           
     , x.ca_prdimg           
     , x.ca_opt_idx           
     , x.ca_opt_amount    
     , y.prd_min_qty     
     , y.prd_max_qty      
  FROM (
    SELECT ca_idx, ca_prdno, ca_prdname, ca_prdimg, ca_opt_idx, ca_opt_amount
      FROM mkw_cart_temp
     WHERE ca_id = 'e59df6010a5765549f975003d672170b'       
       AND ca_direct = 'basket'
     ORDER BY ca_idx ASC
    ) AS X
  INNER JOIN shop_product AS Y
    ON x.ca_prdno = y.prd_no

by 마농 [2021.06.16 10:01:07]

우선 조회 컬럼의 개수가 다르니 다른 쿼리입니다.
조회 컬럼의 개수를 동일하게 일치시켜서 비교해야 합니다.
조회 컬럼의 개수를 일치시킨다는 가정하에
두 쿼리의 차이점은? 조인 후 정렬이냐? 정렬 후 조인이냐? 차이네요.
뭐가 성능상 더 유리할 지는 모르겠지만
성능 외 관점으로 보면 2번 쿼리는 정렬 결과가 보장되지 않습니다.
최종 정렬을 원한다면 맨 마지막에 정렬 구문이 있어야 합니다.


by 호야별리 [2021.06.16 10:17:56]

네. 조언감사합니다.^^

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