5

約 550 万行のデータを持つ MySql テーブルがあります。毎月、このデータを新しいデータ ファイルでリロードする必要があります。古いデータを削除するには時間がかかるため、ジョブをチャンクに分割するために制限 2000000 を追加しています。例:

DELETE FROM `list_content` WHERE list_id = 3 limit 2000000

私の理論では、クエリが完了した後にメモリが解放される可能性があり、このようにメモリをチャンクに分割すると、リソースを消費しないという利点がある可能性があります。しかし、私の理論を支持するものは何も見つかりませんでした。クエリを 20 分間実行するだけでなく、このように分割するメリットはありますか?

4

1 に答える 1

1

あなたの質問に直接答えるために - 利点はありません。物理的な制限 (OS がサポートする物理メモリの最大量など) に達しておらず、MySQL が適切に作成されたプログラムであると仮定すると、No.

考慮すべきいくつかのこと

(1)

DELETE QUICK FROM `list_content` WHERE list_id = 3

続いて

OPTIMIZE TABLE `list_content`

DELETE QUICKは、削除時にインデックス ブロックのハウスキーピングを実行しません。OPTIMIZE TABLEその後、ステートメントを使用して、すべてのハウスキーピングを一度に行うことができます。

(2)

テーブル全体を一掃する場合は、新しいデータを新しいテーブルにロードします...それを呼び出しますlist_temp

DROP TABLE `list_content`; -- very quick since this is simple a delete file op
RENAME TABLE `list_temp` to `list_content`; -- also quick since this is a file rename op
于 2013-11-05T16:48:28.073 に答える