Pārlūkot izejas kodu

이벤트쿼리 튜닝

swkim 4 gadi atpakaļ
vecāks
revīzija
787be50327

+ 38 - 58
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -1776,7 +1776,7 @@
 		        ,(CASE WHEN RNK.LIST_PRICE > 0 THEN 100 - ROUND((RNK.CURR_PRICE / RNK.LIST_PRICE) * 100 ,0) ELSE 0 END ) AS DC_RATE
 		      FROM
 		         (
-		          SELECT  ROW_NUMBER() OVER (PARTITION BY GOODS.BRAND_GROUP_NO ORDER BY GOODS.DISP_ORD DESC, GOODS.DIS) AS RNUM
+		          SELECT  ROW_NUMBER() OVER (PARTITION BY GOODS.BRAND_GROUP_NO ORDER BY GOODS.DIS DESC, GOODS.DISP_ORD DESC, GOODS.REG_DT DESC) AS RNUM
 		                 , GOODS.*
 		            FROM 
 		                (
@@ -1803,6 +1803,7 @@
 		                         , G.LIST_PRICE                                             /*정상가(최초판매가)*/
 		                         , G.CURR_PRICE                                             /*현재판매가*/
 		                         , 1 AS DIS
+								 , G.REG_DT
 		                        FROM   TB_SHOT_DELV_BRAND SDB
 		                                        INNER JOIN TB_SHOT_DELV_GOODS SDG
 		                               ON SDB.BRAND_GROUP_NO = SDG.BRAND_GROUP_NO
@@ -1844,6 +1845,7 @@
 		                            , G.LIST_PRICE                                             /*정상가(최초판매가)*/
 		                            , G.CURR_PRICE                                             /*현재판매가*/
 		                            , 2 AS DIS
+									, G.REG_DT
 		                        FROM   TB_SHOT_DELV_BRAND SDB
 		                                         INNER JOIN TB_BRAND_GROUP BG 
 		                               ON SDB.BRAND_GROUP_NO = BG.BRAND_GROUP_NO 
@@ -1867,58 +1869,9 @@
 		               )GOODS 
 		          WHERE CASE WHEN GOODS.GOODS_CD_CNT>1 THEN GOODS.DIS = 1 ELSE GOODS.DIS = 2 END  
 		        )RNK
-		   WHERE RNK.RNUM <![CDATA[<=]]> 100
+		   WHERE RNK.RNUM <![CDATA[<=]]> 30
 		)
-		, TAB_GOODS_IMG AS (
-		        /* 상품의 이미지 */
-		            SELECT BG.GOODS_CD
-		                 , MAX(CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END)   AS SYS_IMG_NM
-		            FROM   TAB_BRAND_GOODS BG
-		                 , TB_GOODS_IMG GI
-		            WHERE  BG.GOODS_CD = GI.GOODS_CD
-		            AND    BG.MAIN_COLOR_CD = GI.COLOR_CD
-		            AND    (GI.DEFAULT_IMG_YN = 'Y' OR GI.MOUSEOVER_IMG_YN = 'Y')
-		            GROUP  BY BG.GOODS_CD
-		)
-		, TAB_COLORCHIP AS (
-		            /* 상품 컬러칩 */
-		            SELECT BG.GOODS_CD
-		                 , GROUP_CONCAT(DISTINCT CONCAT(C.COLOR_CD,':',CC.CD_DESC) ORDER BY CC.DISP_ORD SEPARATOR ',') AS COLOR_CHIPS
-		            FROM   TAB_BRAND_GOODS BG
-		                 , TB_OPTION O
-		                 , TB_COLOR C
-		                 , TB_COMMON_CODE CC
-		            WHERE  BG.GOODS_CD = O.GOODS_CD
-		            AND    O.OPT_CD1 = C.COLOR_CD
-		            AND    C.COLOR_GRP_CD = CC.CD
-		            AND    O.DISP_YN = 'Y'
-		            AND    C.USE_YN = 'Y'
-		            AND    CC.USE_YN = 'Y'
-		            GROUP  BY BG.GOODS_CD
-		)
-		, TAB_GOODS_BENEFIT AS (
-		            /* 상품혜택 */
-		            SELECT GOODS_CD
-		                 , GROUP_CONCAT(CONCAT(BENEFIT_GB,':',BENEFIT_NM) ORDER BY NUMB SEPARATOR ',') AS ICON
-		            FROM   (
-		                    SELECT BG.GOODS_CD
-		                         , GB.BENEFIT_GB
-		                         , CASE WHEN GB.BENEFIT_GB = '10' THEN '쿠폰할인'
-		                                WHEN GB.BENEFIT_GB = '20' THEN '무료배송'
-		                                WHEN GB.BENEFIT_GB = '30' THEN '사은품'
-		                                WHEN GB.BENEFIT_GB = '40' THEN '신상'
-		                                ELSE '총알배송'
-		                           END                               AS BENEFIT_NM
-		                         , RANK() OVER(PARTITION BY BG.GOODS_CD
-		                                       ORDER BY GB.BENEFIT_GB
-		                                              , GB.GOODS_CD) AS NUMB
-		                    FROM   TAB_BRAND_GOODS BG
-		                         , TB_GOODS_BENEFIT GB
-		                    WHERE  BG.GOODS_CD = GB.GOODS_CD
-		                   ) Z
-		            GROUP  BY GOODS_CD
-		)
-		 SELECT 
+		 SELECT
 		        BG.RNUM
 		      , BG.BRAND_NM
 		      , BG.GOODS_CD
@@ -1929,9 +1882,39 @@
 		      , BG.MAIN_COLOR_CD
 		      , BG.LIST_PRICE
 		      , FN_GET_BENEFIT_PRICE( #{frontGb} /**P*/,BG.GOODS_CD,BG.CURR_PRICE,#{custGb})                              AS CURR_PRICE    /*현재판매가*/
-		      , GI.SYS_IMG_NM
-		      , C.COLOR_CHIPS                                                                                                      /*컬러칩*/
-		      , GB.ICON                                                                                                            /*혜택아이콘*/
+			, (SELECT MAX(CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END)
+				FROM TB_GOODS_IMG GI
+				WHERE GI.GOODS_CD = BG.GOODS_CD AND GI.COLOR_CD = BG.MAIN_COLOR_CD AND (GI.DEFAULT_IMG_YN = 'Y' OR GI.MOUSEOVER_IMG_YN = 'Y')
+			    ) AS SYS_IMG_NM
+			, ( SELECT GROUP_CONCAT(DISTINCT CONCAT(C.COLOR_CD,':',CC.CD_DESC) ORDER BY CC.DISP_ORD SEPARATOR ',')
+				FROM TB_OPTION O
+					, TB_COLOR C
+					, TB_COMMON_CODE CC
+				WHERE  BG.GOODS_CD = O.GOODS_CD
+					AND    O.OPT_CD1 = C.COLOR_CD
+					AND    C.COLOR_GRP_CD = CC.CD
+					AND    O.DISP_YN = 'Y'
+					AND    C.USE_YN = 'Y'
+					AND    CC.USE_YN = 'Y'
+				) AS COLOR_CHIPS
+			, (
+				SELECT GROUP_CONCAT(CONCAT(BENEFIT_GB,':',BENEFIT_NM) ORDER BY NUMB SEPARATOR ',')
+				FROM  (
+					SELECT BG.GOODS_CD
+						, GB.BENEFIT_GB
+						, CASE WHEN GB.BENEFIT_GB = '10' THEN '쿠폰할인'
+						WHEN GB.BENEFIT_GB = '20' THEN '무료배송'
+						WHEN GB.BENEFIT_GB = '30' THEN '사은품'
+						WHEN GB.BENEFIT_GB = '40' THEN '신상'
+						ELSE '총알배송'
+						END                               AS BENEFIT_NM
+						, RANK() OVER(PARTITION BY BG.GOODS_CD
+						ORDER BY GB.BENEFIT_GB
+						, GB.GOODS_CD) AS NUMB
+					FROM   TB_GOODS_BENEFIT GB
+					WHERE  BG.GOODS_CD = GB.GOODS_CD
+				) Z
+			) AS ICON                                                                                                           /*혜택아이콘*/
 		       <choose>
 		                 <when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
 		             , IF(W.GOODS_CD IS NULL,'','likeit')                                                                AS LIKE_IT       /*위시리스트담긴상품*/
@@ -1941,9 +1924,6 @@
 		                 </otherwise>
 		      </choose>
 		FROM   TAB_BRAND_GOODS BG
-		LEFT OUTER JOIN TAB_GOODS_IMG GI ON BG.GOODS_CD = GI.GOODS_CD
-		LEFT OUTER JOIN TAB_COLORCHIP C ON BG.GOODS_CD = C.GOODS_CD
-		LEFT OUTER JOIN TAB_GOODS_BENEFIT GB ON BG.GOODS_CD = GB.GOODS_CD
 		<if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
 		LEFT OUTER JOIN TB_WISHLIST W ON BG.GOODS_CD = W.GOODS_CD
 		        AND W.CUST_NO = #{custNo}