MySql删除需要很长时间

时间:2017-03-08 21:48:18

标签: mysql sql query-optimization innodb

我的查询是根据主键删除一组300条记录。

该表大约有250,000条记录和4列(int PK,varchar,date,tinyint),因此它应该是一个非常易于管理的大小,但是,在没有运行其他查询的情况下删除大约需要2分钟,这看起来很漂亮根据删除的行数和表格的大小而过多。

sql看起来像这样:

-- this takes less than 1 second
CREATE TEMPORARY TABLE IF NOT EXISTS temp AS (
    SELECT id
    FROM some_other_table
    WHERE ...
    LIMIT 300
);  

-- id is the primary key
-- this takes upwards of 2 minutes
DELETE FROM queue WHERE id in(
    select id from temp
);

该表只有一个附加索引,没有外键关系。关于我可以做些什么来加快这一点的任何想法?

1 个答案:

答案 0 :(得分:5)

Mysql无法很好地优化IN,而是使用JOIN:

DELETE q.* FROM queue q INNER JOIN temp t ON q.id=t.id