ホームページ >データベース >mysql チュートリアル >PostgreSQLでIDで何百万ものデータベース行を効率的に削除するにはどうすればよいですか?

PostgreSQLでIDで何百万ものデータベース行を効率的に削除するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-24 11:46:09420ブラウズ

How Can I Efficiently Delete Millions of Database Rows by ID in PostgreSQL?

id

による数百万のポストグレスクル行の高性能削除

何百万ものデータベース行を削除すると、パフォーマンスに深刻な影響を与える可能性があります。この記事では、IDSのリストを使用して、一般的なボトルネックに対処するPostgreSQLデータベースから約200万行を削除するための効率的な戦略を検証します。

課題:

タスクには、提供されたIDリストに基づいて大きなデータセットを削除することが含まれます。 バッチの削除や

句のクエリなどの標準的な方法は、このスケールに対して非効率的であることが多いことがよくあります。 IN

最適なソリューション:

最良のアプローチは、いくつかの要因に依存します:

    同時アクセス:
  • 同時書の存在がプロセスをかなり簡素化する。
  • インデックス作成:
  • 一時的に不要なインデックスをドロップし(削除に重要なものを除く)、その後それらを再構築すると速度が向上する可能性があります。 トリガー:
  • 削除プロセス中にトリガーを非アクティブ化または削除すると、パフォーマンスが大幅に改善される可能性があります。
  • 外国の鍵:外国のキー関係を慎重に管理します。削除を容易にするために、一時的な無効化または変更を検討してください
  • autovacuum:running事前にパフォーマンスを最適化できます
  • メモリー内アプローチ(残りのデータセットが小さい場合):削除後に残っているデータが元のテーブルよりも大幅に小さく、この非常に効率的な方法を検討してください。 VACUUM ANALYZE
  • これにより、外国の鍵、ビュー、その他の依存関係が保持されているため、清潔で最適化されたテーブルが生まれます。
  • vs.
<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>
:小さいテーブルの場合、

は、トリガーと外部キーの制約を維持するため、

よりも高速になる可能性があります。
  • 主要な考慮事項:DELETETRUNCATE すべての参照テーブルも同時に切り捨てられない限り、DELETETRUNCATE外部キー参照のテーブルでは使用できません。
トリガー

トリガーをトリガーしません。 削除後

(または
    )は、ディスクのスペースを取り戻し、テーブルサイズを最適化するために重要です。
  • > TRUNCATE

以上がPostgreSQLでIDで何百万ものデータベース行を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。