MySql 删除优化

时间:2021-06-08 08:52:51

标签: mysql sql-delete database-optimization

这是我要执行的查询

DELETE FROM testmachine WHERE workdone != 0 AND timetaken < 1617215400 LIMIT 1000;

执行查询需要 50 多秒。我想提高速度。

有什么办法可以减少执行时间吗?

这是我的列架构:

id  int UN AI PK
att text
ways    varchar(100)
mediuminv   text
mediumid    varchar(45)
timetaken   int
workdone    int
in_use  tinyint UN
status  tinyint
in  text
out text

这里是索引:

Index: idx_time_taken_work_done_in_use_status

Definition:

    Type    BTREE
    Unique  No
    Visible Yes
    Columns done
        time
        in_use
        status

TIA

1 个答案:

答案 0 :(得分:0)

如果查询用于类似的地方:

REPEAT
    DELETE FROM testmachine WHERE workdone != 0 AND timetaken < 1617215400 LIMIT 1000;
UNTIL !ROW_COUNT() END REPEAT;

然后试试

ALTER TABLE testmachine 
    ADD COLUMN flag BOOLEAN AS (workdone != 0 AND timetaken < 1617215400) VIRTUAL,
    ADD INDEX idx_flag (flag);

REPEAT
    DELETE FROM testmachine WHERE flag LIMIT 1000;
UNTIL !ROW_COUNT() END REPEAT;

ALTER TABLE testmachine
    DROP INDEX idx_flag,
    DROP COLUMN flag;
相关问题