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:
VACUUM ANALYZE
Pendekatan dalam memori (untuk dataset yang lebih kecil): <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
mungkin lebih cepat daripada TRUNCATE
kerana ia mengekalkan pencetus dan kekangan utama asing.
DELETE
TRUNCATE
tidak boleh digunakan pada jadual dengan rujukan utama asing melainkan semua jadual rujukan juga dipotong serentak.
TRUNCATE
tidak mencetuskan TRUNCATE
Post-Retetion ON DELETE
(atau 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!