Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Not a Bug
-
10.0.20
-
None
-
CentOS 6.7
Description
There are different query in update and select query.
1) UPDATE QUERY
"id" "select_type" "table" "type" "possible_keys" "key" "key_len" "ref" "rows" "Extra"
|
"1" "SIMPLE" "TB_LI_GERP_SEW_SHIP" "range" "TB_LI_GERP_SEW_SHIP_N04,TB_LI_GERP_SEW_SHIP_N05,TB_LI_GERP_SEW_SHIP_N02,TB_LI_GERP_SEW_SHIP_N07,TB_LI_GERP_SEW_SHIP_N01,TB_LI_GERP_SEW_SHIP_N06,TB_LI_GERP_SEW_SHIP_N08,TB_LI_GERP_SEW_SHIP_N09,TB_LI_GERP_SEW_SHIP_N11,TB_LI_GERP_SEW_SHIP_N12,TB_LI_GERP_SEW_SHIP_N13,TB_LI_GERP_SEW_SHIP_N15" "TB_LI_GERP_SEW_SHIP_N06" "110" \N "1" "Using where"
|
|
|
explain
|
UPDATE /* AllocationExportShip.updateSEWShip */
|
TB_LI_GERP_SEW_SHIP
|
SET PRCS_STATUS = 'Y'
|
, PRCS_MESSAGE = 'SUCCESS'
|
, LAST_UPDATE_DATE = NOW()
|
, LAST_UPDATE_USER_ID = 'PG_LD_GERP_DAILYOUT3'
|
WHERE CORP_TYPE = 'LGEKR'
|
AND DC_CD = 'F01'
|
AND PRCS_STATUS IN ('N','E')
|
AND PG_YMD = '2016-10-20 00:00:00.0'
|
AND CONTAINER_NO = 'ZCSU8646091'
|
AND INTERFACE_ID = '1651217'
|
2) SELECT QUERY
"id" "select_type" "table" "type" "possible_keys" "key" "key_len" "ref" "rows" "Extra"
|
"1" "SIMPLE" "TB_LI_GERP_SEW_SHIP" "ref" "TB_LI_GERP_SEW_SHIP_N04,TB_LI_GERP_SEW_SHIP_N05,TB_LI_GERP_SEW_SHIP_N02,TB_LI_GERP_SEW_SHIP_N07,TB_LI_GERP_SEW_SHIP_N01,TB_LI_GERP_SEW_SHIP_N06,TB_LI_GERP_SEW_SHIP_N08,TB_LI_GERP_SEW_SHIP_N09,TB_LI_GERP_SEW_SHIP_N11,TB_LI_GERP_SEW_SHIP_N12,TB_LI_GERP_SEW_SHIP_N13,TB_LI_GERP_SEW_SHIP_N15" "TB_LI_GERP_SEW_SHIP_N06" "110" "const,const,const,const,const" "1" "Using index condition; Using where"
|
|
|
explain
|
select * from TB_LI_GERP_SEW_SHIP
|
WHERE CORP_TYPE = 'LGEKR'
|
AND DC_CD = 'F01'
|
AND PRCS_STATUS IN ('N','E')
|
AND PG_YMD = '2016-10-20 00:00:00.0'
|
AND CONTAINER_NO = 'ZCSU8646091'
|
AND INTERFACE_ID = '1651217'
|
|
Then, I change the original query to multi-update join query. This query belows.
"id" "select_type" "table" "type" "possible_keys" "key" "key_len" "ref" "rows" "Extra"
|
"1" "PRIMARY" "<derived2>" "ALL" \N \N \N \N "2" ""
|
"1" "PRIMARY" "B" "eq_ref" "PRIMARY" "PRIMARY" "4" "A.pk_id" "1" ""
|
"2" "DERIVED" "TB_LI_GERP_SEW_SHIP" "ref" "TB_LI_GERP_SEW_SHIP_N04,TB_LI_GERP_SEW_SHIP_N05,TB_LI_GERP_SEW_SHIP_N02,TB_LI_GERP_SEW_SHIP_N07,TB_LI_GERP_SEW_SHIP_N01,TB_LI_GERP_SEW_SHIP_N06,TB_LI_GERP_SEW_SHIP_N08,TB_LI_GERP_SEW_SHIP_N09,TB_LI_GERP_SEW_SHIP_N11,TB_LI_GERP_SEW_SHIP_N12,TB_LI_GERP_SEW_SHIP_N13,TB_LI_GERP_SEW_SHIP_N15" "TB_LI_GERP_SEW_SHIP_N06" "110" "const,const,const,const,const" "1" "Using where"
|
|
|
EXPLAIN
|
UPDATE
|
(
|
SELECT CORP_TYPE, DC_CD, PG_YMD, CONTAINER_NO, INTERFACE_ID, PRCS_STATUS, pk_id
|
FROM TB_LI_GERP_SEW_SHIP
|
WHERE CORP_TYPE = 'LGEKR'
|
AND DC_CD = 'F01'
|
AND PRCS_STATUS IN ('N','E')
|
AND PG_YMD = '2016-10-20 00:00:00.0'
|
AND CONTAINER_NO = 'ZCSU8646091'
|
AND INTERFACE_ID = '1651217'
|
) A
|
JOIN TB_LI_GERP_SEW_SHIP B ON (A.pk_id=B.pk_id)
|
SET B.PRCS_STATUS = 'Y'
|
, B.PRCS_MESSAGE = 'SUCCESS'
|
, B.LAST_UPDATE_DATE = NOW()
|
, B.LAST_UPDATE_USER_ID = 'PG_LD_GERP_DAILYOUT3'
|
;
|
I attached create table ddl script. Why did make the difference?