-1

15k レコードの削除を伴う SQL 削除クエリがあります。フォーマットは次のとおりです。

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

代わりJOININ演算子を使用し、結合条件で使用されるフィールドにインデックスを作成します。

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

attr1condition1および列にインデックスを追加して、condition2パフォーマンスを向上させてみてください。

于 2012-06-26T09:33:19.170 に答える