删除从表中各地90K记录包含100K记录我做的:如何使用mysql中'in'子句的select来优化删除?
delete from table1 where id in (select id from table2) ;
大约需要30分钟,如果你建造相同dynamiclly一些它在不到一分钟的运行编程语言。
for i in (records to delete)
delete from table1 where id = i
如何优化原生mysql查询?
删除从表中各地90K记录包含100K记录我做的:如何使用mysql中'in'子句的select来优化删除?
delete from table1 where id in (select id from table2) ;
大约需要30分钟,如果你建造相同dynamiclly一些它在不到一分钟的运行编程语言。
for i in (records to delete)
delete from table1 where id = i
如何优化原生mysql查询?
我建议你使用一个连接操作,而不是IN (subquery)
,并确保合适的索引(与id
作为前导列)可在表1 :
DELETE t1.*
FROM table1 t1
JOIN table2 t2
ON t2.id = t1.id
编辑
我不知道为什么我的答案收到了一个downvote。如果这是一个不好的答案,或者是无益的,那么我会期待评论为什么这是一个不好的答案。
这个答案比我大部分答案都更简洁;我想我可以解释为什么合适的索引对于良好的性能是必要的。
OP问题是如何“优化删除”使用了一个col IN (subquery)
谓词。我承认我没有提供解释,因为为什么这种模式会导致次优的表现;和为什么连接操作有时可以更有效率。 OP询问“如何优化原生SQL查询”......简短的答案是重新编写查询。
MySQL是坏,在子查询,使用存在
delete from table1 where exists (select 1 from table2 WHERE table1.id=table2.id) ;
试试这个:
DELETE
table1.*
FROM
table1, table2
WHERE
table1.id = table2.id
或使用JOIN。 尽可能避免IN。
你的例子是一个隐含的'JOIN',自1992年以来已被弃用。http://en.wikipedia.org/wiki/Join_%28SQL%29 –
table2中有多少条记录?无论你做什么,“身份证号码(吨,吨和吨数)都会变慢。 –