【发布时间】:2021-06-08 08:52:51
【问题描述】:
这是我要执行的查询
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
【问题讨论】:
-
WHERE workdone != 0 AND timetaken 这种情况是完全静态的吗?部分静态(1617215400 更改)?完全动态?
-
@Akina 它是部分静态的,workdone !=0 是静态的,所用时间会有所不同
-
workdone值列表是 0/1 还是更宽?此查询是否用于删除所有按块匹配(但不限于)的行作为最终目标? -
@Akina 更宽,存储部分时间戳
-
测试以下所需的时间:1) 使用 WHERE 中使用的表达式创建虚拟生成列并使用它创建索引 2) 使用此列删除 3) 删除列和索引。也许它会更快,特别是如果您执行大量删除操作?
标签: mysql sql-delete database-optimization