【发布时间】:2015-12-20 20:16:45
【问题描述】:
delete from tablename where id in ('val1','val2',....,'val6000');
'id' 是一个 FK 列 [char(50)]
IN 查询子句包含 6000 个值
12 分 10 秒后,从表 'tablename' 中删除 1270000 行。
tablename 包含 2 个索引列,一个 PK 和一个 FK('id' 是 FK col)。
我的疑问是,需要更多时间,是删除 1270000 行的时间吗?还是解析 where 子句以确定要删除的行?
有没有办法减少这个执行时间?
【问题讨论】:
-
如果为每个 id 运行单独的查询会发生什么?
-
解析查询会很小。删除包含几个索引的表中的近 130 万行需要 12 分钟,这似乎是一个非常不错的数字。
-
@Pekka:我没有尝试为每个 id 单独运行查询。认为那不是更好的方法。
-
@e4c5:但是相同的查询在 MS SQL 中只运行了大约两分钟,并且存在相同数量的数据
-
嗨@Pekka웃我尝试批量删除查询,这意味着在“in”查询中不是6000个值,而是用1000个值尝试了6次,但花了42分钟。所以单查询似乎是最好的。但我试图从 9 分钟减少到至少 3 到 4 分钟。
标签: mysql database-performance delete-row