我有一个非常复杂的 SELECT,它用 ids 填充临时表,基于此我需要创建 DELETE 查询。
例如,临时表的行如下所示:
- first_id | second_id | third_id
- 1 | 222 | 342
- 1 | 222 | 343
- 1 | 223 | 551
- ...
并查询:
DELETE FROM mytable WHERE CONCAT(first_id, 'X', second_id, 'X', third_id) IN (SELECT CONCAT(first_id, 'X', second_id, 'X', third_id) FROM temp_table);
但是这个查询太长了。当我显示PROCESSLIST时,我看到这个查询时间约为4000秒。
所以我的问题是,如何优化 DELETE 查询,根据 select FROM 另一个表从一个表中删除行,并根据 3 个键仅删除行?
最佳答案
您可以首先删除 CONCAT
并使用 JOIN
而不是子查询,尝试如下操作:
DELETE mt FROM mytable mt INNER JOIN temp_table tt ON mt.first_id = tt.first_id AND mt.second_id = tt.second_id AND mt.third_id = tt.third_id
关于mysql - 根据选择删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45305067/