Rumah >pangkalan data >tutorial mysql >Bagaimanakah saya dapat memadam berjuta -juta baris pangkalan data dengan id di PostgreSQL?

Bagaimanakah saya dapat memadam berjuta -juta baris pangkalan data dengan id di PostgreSQL?

Susan Sarandon
Susan Sarandonasal
2025-01-24 11:46:09420semak imbas

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

penghapusan prestasi tinggi berjuta-juta baris postgresql oleh id

Menghapus berjuta -juta baris pangkalan data boleh memberi kesan buruk kepada prestasi. Artikel ini mengkaji strategi yang cekap untuk mengeluarkan kira -kira dua juta baris dari pangkalan data PostgreSQL menggunakan senarai ID, menangani kesesakan biasa.

Cabaran:

Tugas melibatkan memadam dataset yang besar berdasarkan senarai ID yang disediakan. Kaedah standard seperti penghapusan batch dan

pertanyaan klausa sering membuktikan tidak cekap untuk skala ini. IN

penyelesaian optimum:

Pendekatan terbaik bergantung kepada beberapa faktor:

  • Akses serentak: Ketiadaan menulis bersamaan dengan memudahkan proses dengan ketara.
  • Pengindeksan: sementara menjatuhkan indeks yang tidak perlu (tidak termasuk yang penting untuk penghapusan) dan membina semula mereka selepas itu dapat meningkatkan kelajuan.
  • Pencetus: Menyahaktifkan atau mengeluarkan pencetus semasa proses penghapusan dapat meningkatkan prestasi dengan ketara.
  • Kekunci asing: dengan teliti menguruskan hubungan utama asing; Pertimbangkan melumpuhkan atau pengubahsuaian sementara untuk memudahkan penghapusan.
  • autovacuum: running terlebih dahulu dapat mengoptimumkan prestasi. VACUUM ANALYZE Pendekatan dalam memori (untuk dataset yang lebih kecil):
  • Jika data yang tinggal selepas penghapusan adalah lebih kecil daripada jadual asal dan sesuai dalam RAM, pertimbangkan kaedah yang sangat efisien ini:
  • ini mengekalkan kunci asing, pandangan, dan kebergantungan lain, menghasilkan jadual yang bersih dan dioptimumkan.
<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>

    vs
  • : untuk jadual yang lebih kecil, DELETE mungkin lebih cepat daripada TRUNCATE kerana ia mengekalkan pencetus dan kekangan utama asing. DELETE TRUNCATE
  • Pertimbangan utama:

tidak boleh digunakan pada jadual dengan rujukan utama asing melainkan semua jadual rujukan juga dipotong serentak.
  • TRUNCATE tidak mencetuskan
  • pencetus.
  • TRUNCATE Post-Retetion ON DELETE (atau
  • ) adalah penting untuk menuntut semula ruang cakera dan mengoptimumkan saiz jadual.
  • VACUUM

Atas ialah kandungan terperinci Bagaimanakah saya dapat memadam berjuta -juta baris pangkalan data dengan id di PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn