执行此查询需要将近 2 分钟(更改 9 条记录):
UPDATE table1 t1
SET t1.code_id = null, t1.code_group = null
WHERE t1.another_id IN (SELECT t2.another_id
FROM table2 t2
WHERE ((t2.id_parent = 2658 AND t2.year = 2016)
OR (t2.id = 2658 AND t2.year = 2016)))
单独执行此查询需要 0.0030 秒:
SELECT t2.another_id
FROM table2 t2
WHERE ((t2.id_parent = 2658 AND t2.year = 2016)
OR (t2.id = 2658 AND t2.year = 2016))
并以整数形式返回 3 行。
以下是关于这两个表的信息:
CREATE TABLE IF NOT EXISTS `table1`
(
`another_id` int(11) NOT NULL,
`table1_id` int(11) NOT NULL,
`code_group` varchar(1) DEFAULT NULL,
`code_id` int(10) DEFAULT NULL,
PRIMARY KEY (`another_id`,`table1_id`),
KEY `another_id` (`another_id`),
KEY `code_group` (`code_group`,`code_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `table2`
(
`id_year` int(11) NOT NULL,
`id` int(11) NOT NULL,
`id_parent` int(11) DEFAULT NULL,
`another_id` int(11) NOT NULL,
`code_group` varchar(1) DEFAULT NULL,
`code_id` int(10) DEFAULT NULL,
PRIMARY KEY (`id_year`,`id`),
KEY `id_parent` (`id_year`,`id_parent`)
KEY `another_id` (`another_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_polish_ci;
有没有人可以告诉我为什么执行此查询需要 2 分钟?
最佳答案
您可以使用 INNER JOIN 更新如下:t2.year 也不存在
UPDATE table1 t1
INNER JOIN table2 t2 ON t2.another_id = t1.another_id
AND ((t2.id_parent= 2658 AND t2.year= 2016) OR (t2.id= 2658 AND t2.year= 2016))
SET t1.code_id = NULL, t1.code_group = NULL
关于mysql - 为什么这个 MYSQL UPDATE 查询需要 2 分钟才能运行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39289312/