sql中的DELETE语句执行时间太长

时间:2012-06-26 09:25:13

标签: sql postgresql sql-delete

我有一个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,这将花费更少的时间来执行。

3 个答案:

答案 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)

尝试在attr1condition1condition2列中添加索引以提高效果。