python-mysql循环在delete语句上的速度逐渐减慢



我有一个简单的delete语句。它在前100次删除时工作得很快。然后它会减速,然后它会加速。Explain看起来很快,但删除很慢。

for loop
delete from data.stafftable where staffname='something' and time_deleted<now() and staff_type='teach';

解释

id: 1
select_type: DELETE
table: stafftable
partitions: NULL
type: range
possible_keys: PRIMARY,staff_name_index,time_deleted_index
key: PRIMARY
key_len: 7
ref: const
rows: 1
filtered: 100.00

做得越多,就越需要跨过不需要删除的行。无论表有INDEX(time_deleted)还是没有有用的索引,它都会变得越来越慢。

这将大大加快速度:

INDEX(staff_type, staffname, time_deleted)

使用此索引,每次运行DELETE时,它遇到的第一行将满足删除条件。无需跳过具有不同人员名称或类型但时间戳匹配的行。

您还可以将LIMIT 100添加到DELETE语句中。然后它会更快地清理桌子。(不,不要落入"越大越好"的陷阱。(

哦,现在我看到了隐藏的信息——员工的名字随着你的删除而改变。CCD_ 5可能有帮助,也可能没有帮助;但应该不会有伤害。

(不,"字符串比较"不是减速的原因。(

最新更新