0

以下のように構成された 2 つのテーブルがあります: (システム内のオブジェクト タイプごとに複数の ai_$object テーブル)

       ai_$object         ,       ai_ext_ids
--------------------        -------------------------- 
ext_id | hash                    id | ext_id | object_name | sfID

一括削除から sf_ids を取得し、これら 2 つのテーブルからレコードを削除する必要がある場合、この削除の最も愚かな方法は次のようになります。

疑似コードで -->

$idToBeDeleted = SELECT ext_id FROM ai_tr_tbl_extids WHERE objectName='$object' AND sfID ='$s'" ;

DELETE FROM ai_tr_tbl_extids WHERE objectName='$object' AND sfID ='$s';

DELETE FROM ai_$object WHERE ext_id='$idToBeDeleted';

私の質問は、この部分のパフォーマンスを向上させる方法ですか? そして、このコードはループ内で実行されます。配列を使用した一括削除でこの削除を行う必要があります: SELECT * FROM table WHERE ID IN (1,2,3,4)

4

1 に答える 1

0

パフォーマンスを向上させるには、objectName 列にインデックスを付ける必要があります。そして、次のクエリを試してください。

$idToBeDeleted = SELECT ext_id FROM ai_tr_tbl_extids WHERE objectName='$object' AND sfID ='$s'" ;

DELETE FROM ai_tr_tbl_extids WHERE ext_id='$idToBeDeleted';

DELETE FROM ai_$object WHERE ext_id='$idToBeDeleted';

ただし、削除する のリストを取得できる場合ext_idは、ループを削除して で削除するだけINです。

DELETE FROM ai_tr_tbl_extids WHERE ext_id IN ($idToBeDeletedCommaSeparatedValue');

DELETE FROM ai_$object WHERE ext_id IN ($idToBeDeletedCommaSeparatedValue');
于 2013-09-13T15:49:16.743 に答える