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

Permintaan PostgreSQL lambat saat menggunakan NOT IN

get_customer_trans() bukan tabel - mungkin beberapa prosedur tersimpan, jadi kueri tidak terlalu sepele. Anda perlu melihat apa sebenarnya yang dilakukan prosedur tersimpan ini untuk memahami mengapa ini bisa berjalan lambat.

Namun, terlepas dari perilaku prosedur tersimpan, menambahkan indeks berikut akan banyak membantu:

CREATE INDEX do_not_email_tbl_idx1
    ON do_not_email_tbl(do_not_email_address);

Indeks ini memungkinkan NOT IN kueri untuk mengembalikan jawaban dengan cepat. Namun, NOT IN diketahui memiliki masalah dalam versi PostgreSQL yang lebih lama - jadi pastikan Anda menjalankan setidaknya PostgreSQL 9.1 atau yang lebih baru.

PERBARUI . Coba ubah kueri Anda menjadi:

SELECT t.*
FROM get_customer_trans() AS t
WHERE NOT EXISTS (
    SELECT 1
    FROM do_not_email_tbl
    WHERE do_not_email_address = t.user_email
    LIMIT 1
)

Kueri ini tidak menggunakan NOT IN , dan harus bekerja dengan cepat. Saya pikir di PostgreSQL 9.2 kueri ini harus bekerja secepat kueri dengan NOT IN sekalipun.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres - BUAT TABEL DARI PILIH

  2. Perbarui baris yang ada di database dari pandas df

  3. Berikan hak istimewa untuk database tertentu di PostgreSQL

  4. strftime di sqlite konversi ke postgres

  5. Bagaimana cara mengubah kepemilikan beberapa tabel di dalam database dari postgres ke pengguna lain?