MySQL update with inner join taking too long
0
votes
1
answer
225
views
I have the following two tables
CREATE TABLE
tbl_products_temp
(
cd_id
INT(6) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
cd_structure
MEDIUMBLOB NOT NULL,
cd_smiles
TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
cd_formula
VARCHAR(100) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
cd_molweight
DOUBLE NULL DEFAULT NULL,
cd_hash
INT(11) NOT NULL,
cd_timestamp
DATETIME NOT NULL,
cd_pre_calculated
TINYINT(1) NOT NULL DEFAULT '0',
iupac_name
VARCHAR(600) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
price_currency
VARCHAR(3) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
price1
DECIMAL(10,2) NULL DEFAULT NULL,
price2
DECIMAL(10,2) NULL DEFAULT NULL,
price3
DECIMAL(10,2) NULL DEFAULT NULL,
last_update
TIMESTAMP NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
deleted_dt
DATETIME NULL DEFAULT NULL,
PRIMARY KEY (cd_id
) USING BTREE,
INDEX tbl_products_temp_hx
(cd_hash
) USING BTREE,
INDEX tbl_products_temp_px
(cd_pre_calculated
) USING BTREE,
INDEX idx_iupac_name
(iupac_name
) USING BTREE,
INDEX idx_formula
(cd_formula
) USING BTREE,
INDEX idx_molweight
(cd_molweight
) USING BTREE,
INDEX idx_smiles
(cd_smiles
(100)) USING BTREE
)
COLLATE='latin1_swedish_ci'
ENGINE=MyIsam
CREATE TABLE tbl_products_temp2
(
cd_id
INT(6) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
cd_structure
MEDIUMBLOB NOT NULL,
cd_smiles
TEXT NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
cd_formula
VARCHAR(100) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
cd_molweight
DOUBLE NULL DEFAULT NULL,
cd_hash
INT(11) NOT NULL,
cd_timestamp
DATETIME NOT NULL,
cd_pre_calculated
TINYINT(1) NOT NULL DEFAULT '0',
iupac_name
VARCHAR(600) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
price_currency
VARCHAR(3) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
price1
DECIMAL(10,2) NULL DEFAULT NULL,
price2
DECIMAL(10,2) NULL DEFAULT NULL,
price3
DECIMAL(10,2) NULL DEFAULT NULL,
last_update
TIMESTAMP NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
deleted_dt
DATETIME NULL DEFAULT NULL,
PRIMARY KEY (cd_id
) USING BTREE,
INDEX tbl_products_temp_hx
(cd_hash
) USING BTREE,
INDEX tbl_products_temp_px
(cd_pre_calculated
) USING BTREE,
INDEX idx_iupac_name
(iupac_name
) USING BTREE,
INDEX idx_formula
(cd_formula
) USING BTREE,
INDEX idx_molweight
(cd_molweight
) USING BTREE,
INDEX idx_smiles
(cd_smiles
(100)) USING BTREE
)
COLLATE='latin1_swedish_ci'
ENGINE=MyIsam
Table tbl_products_temp has 241633 rows.
Table tbl_products_temp2 has 218380 rows.
I'm trying the following update query but its taking forever.
UPDATE tbl_products_temp
INNER JOIN tbl_products_temp2
ON tbl_products_temp.iupac_name = tbl_products_temp2.iupac_name
SET tbl_products_temp.price1 = tbl_products_temp2.price1,
tbl_products_temp.price2 = tbl_products_temp2.price2,
tbl_products_temp.price3 = tbl_products_temp2.price3,
tbl_products_temp.price_currency = 'EUR'
When I run explain using the following I get:
explain select * from tbl_products_temp
inner join tbl_products_temp2
on tbl_products_temp.iupac_name = tbl_products_temp2.iupac_name
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
--------------------------------------------------------------------------------------------------------------------------------------------
1 | SIMPLE | tbl_products_temp2 | ALL | idx_iupac_name | (NULL) | (NULL) | (NULL) | 218380 |
1 | SIMPLE | tbl_products_temp | ref | idx_iupac_name | idx_iupac_name | 603 | mydb.tbl_products_temp2.iupac_name | 1 | Using where
How can I speed up this update query?
Asked by adam78
(155 rep)
Nov 7, 2022, 05:19 PM
Last activity: Jun 16, 2025, 03:06 PM
Last activity: Jun 16, 2025, 03:06 PM