我有一个sql删除查询,其中invovles删除15k记录。 以下是格式:
query += """ DELETE FROM table1
WHERE attr1 IN (SELECT distinct attr2
FROM table2
WHERE condition1 = %d
AND condition2 = %d);
""" %(val1, val2)
这个IN运算符需要花费很多时间。 请建议我如何将其转换为JOIN,这将花费更少的时间来执行。
答案 0 :(得分:2)
在JOIN
运算符上使用IN
,并在连接条件中使用的字段上创建索引。
DELETE FROM table1 using table2 Where attr1 = attr2 And condition1 = %d AND condition2 = %d;
答案 1 :(得分:1)
从子查询和IN子句中删除Distinct。而是使用Where EXISTS。 您的Distinct将导致内部订单,这会消耗更多时间。
还有索引table1.attr1和table2.attr2。
query += """ DELETE FROM table1
WHERE Exists (SELECT null
FROM table2
WHERE condition1 = %d
AND condition2 = %d
and table2.attr2 = table1.attr1);
""" %(val1, val2)
答案 2 :(得分:0)
尝试在attr1
,condition1
和condition2
列中添加索引以提高效果。