PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara menghapus banyak baris dari tabel yang sering diakses

  1. Indeks biasanya tidak berguna untuk operasi pada 90% dari semua baris. Pemindaian berurutan akan lebih cepat. (Pengecualian eksotis berlaku.)

  2. Jika Anda perlu mengizinkan pembacaan bersamaan, Anda tidak dapat mengambil kunci eksklusif di atas meja. Jadi Anda juga tidak dapat menjatuhkan indeks apa pun dalam transaksi yang sama.

  3. Anda bisa jatuhkan indeks dalam transaksi terpisah untuk meminimalkan durasi penguncian eksklusif. Di Postgres 9.2 atau yang lebih baru, Anda juga dapat menggunakan LEPASKAN INDEKS SECARA SAAT , yang hanya membutuhkan kunci minimal. Nanti gunakan CREATE INDEX CONCURRENTLY untuk membangun kembali indeks di latar belakang - dan hanya mengambil kunci eksklusif yang sangat singkat.

Jika Anda memiliki kondisi stabil untuk mengidentifikasi 10% (atau kurang) dari baris yang tersisa, saya akan menyarankan indeks parsial hanya pada baris tersebut untuk mendapatkan yang terbaik untuk keduanya:

  • Membaca kueri dapat mengakses tabel dengan cepat (menggunakan indeks parsial) setiap saat.
  • Yang besar DELETE tidak akan mengubah indeks parsial sama sekali, karena tidak ada baris yang terlibat dalam DELETE .
CREATE INDEX foo (some_id) WHERE delete_flag = FALSE;

Dengan asumsi delete_flag adalah boolean . Anda harus menyertakan predikat yang sama dalam kueri Anda (meskipun tampaknya secara logis berlebihan) untuk memastikan Postgres dapat mengindeks sebagian.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perintah PostgreSQL VALUES Dijelaskan

  2. Tidak dapat menjalankan blok di PostgreSQL 8.2

  3. Npgsql - Metode yang ditentukan tidak didukung

  4. Hubungan Satu-ke-Banyak di (Postgre)SQL

  5. Tentang manfaat jalur yang diurutkan