-1

我有一个 sql 删除查询,它涉及删除 15k 条记录。以下是格式:

query += """ DELETE FROM table1
            WHERE attr1 IN (SELECT distinct attr2
                                         FROM table2
                                         WHERE condition1 = %d
                                         AND condition2 = %d);
        """ %(val1, val2)

这个 IN 运算符需要很多时间。请建议我如何将其转换为 JOIN,这将花费更少的时间来执行。

4

3 回答 3

2

JOIN在运算符上使用IN,并在加入条件中使用的字段上创建索引。

DELETE FROM table1 using table2 Where attr1  = attr2 And condition1 = %d AND condition2 = %d;
于 2012-06-26T09:33:13.093 回答
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)
于 2012-06-26T13:45:50.850 回答
0

attr1尝试在,condition1和列中添加索引condition2以提高性能。

于 2012-06-26T09:33:19.170 回答