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
Lepaskan: 2025-01-24 11:46:09
asal
480 orang telah melayarinya

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.
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;
Salin selepas log masuk

    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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan