0

500,000を超えるレコードを持つアクセスデータベースがあり、レコードを一括で削除したいと思います。特定の条件に基づいて削除する必要のあるIDのリストを取得します。これは、1〜5000の範囲である可能性があります。現在、私のコードは次のようになっています。

 for ( i = 0  to 5000 )
 { 
    CDatabase.ExecuteSQL( Delete from table where id = ItemToDelete(i) ) 
 }  

SQL呼び出しごとに約1秒かかります。

一括削除を行うオプションはありますか、それともこれを行うためのより良い方法はありますか?

4

2 に答える 2

0

私は何年もAccessを行っていませんが、同じ課題を抱えています。ある条件を満たすすべてのレコードを取得する代わりに、最初にDELETEWHERE「ある条件」を発行してみます。それでも遅いかもしれませんが、SQL呼び出しの数を5000から1に減らします。

このような大きな#を使用する場合、より極端な解決策は、テーブル全体をテキストファイルにダンプし、必要なものだけを再ロードする小さなプログラムを作成することです。おそらく1回限りの解決策としては適切ではありませんが、毎月これを行う場合は...

ただし、一般的に、パフォーマンスを向上させるには、#Sql呼び出しを最小限に抑えることが最善の方法です。サーバーによっては、WHERE句に主キーフィールドのみが含まれている場合、削除操作がはるかに高速になる場合があります。

于 2012-09-26T23:44:02.893 に答える
0

そのステートメントは次のようになります。

Delete from table where id between 1 and 5000

条件がある場合は、ほとんどの場合、WHEREステートメントを作成できるはずです。INを使用して5000個のIDを個別にリストしないでください。あらゆる種類の制限に遭遇します。

削除の基準を区別できない場合は、個々のIDをテーブルまたはCSVにリストすることができ、どちらもINで機能します。

于 2012-09-27T09:40:22.300 に答える