ホームページ >データベース >mysql チュートリアル >PostgreSQLでIDで何百万ものデータベース行を効率的に削除するにはどうすればよいですか?
id
による数百万のポストグレスクル行の高性能削除何百万ものデータベース行を削除すると、パフォーマンスに深刻な影響を与える可能性があります。この記事では、IDSのリストを使用して、一般的なボトルネックに対処するPostgreSQLデータベースから約200万行を削除するための効率的な戦略を検証します。
課題:
タスクには、提供されたIDリストに基づいて大きなデータセットを削除することが含まれます。 バッチの削除や句のクエリなどの標準的な方法は、このスケールに対して非効率的であることが多いことがよくあります。
IN
最良のアプローチは、いくつかの要因に依存します:
VACUUM ANALYZE
<code class="language-sql">BEGIN; SET LOCAL temp_buffers = '1000MB'; CREATE TEMP TABLE tmp AS SELECT t.* FROM tbl t LEFT JOIN del_list d USING (id) WHERE d.id IS NULL; -- copy remaining rows TRUNCATE tbl; -- clear the table INSERT INTO tbl SELECT * FROM tmp; -- re-insert remaining data COMMIT;</code>:小さいテーブルの場合、
は、トリガーと外部キーの制約を維持するため、
よりも高速になる可能性があります。DELETE
TRUNCATE
すべての参照テーブルも同時に切り捨てられない限り、DELETE
TRUNCATE
外部キー参照のテーブルでは使用できません。
トリガーをトリガーしません。 削除後
(またはTRUNCATE
以上がPostgreSQLでIDで何百万ものデータベース行を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。