这是我要执行的查询
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
答案 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;