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

Masalah kinerja dalam permintaan pembaruan

Dalam urutan kasar dari lebih lambat ke lebih cepat:

  • 200 kueri individual, masing-masing dalam transaksinya sendiri
  • 200 kueri individual, semuanya dalam satu transaksi
  • 1 kueri besar dengan WHERE ... IN (...) atau WHERE EXISTS (SELECT ...)
  • 1 kueri besar dengan INNER JOIN melalui VALUES klausa
  • (hanya lebih cepat untuk daftar nilai yang sangat besar):COPY daftar nilai ke tabel temp, indeks, dan JOIN di atas meja sementara.

Jika Anda menggunakan ratusan nilai, saya sangat menyarankan untuk bergabung melalui VALUES ayat. Untuk ribuan nilai, COPY ke tabel temp dan mengindeksnya lalu bergabung di atasnya.

Contoh bergabung pada klausa nilai. Mengingat ini IN permintaan:

SELECT *
FROM mytable
WHERE somevalue IN (1, 2, 3, 4, 5);

setara dengan VALUES adalah:

SELECT *
FROM mytable
INNER JOIN (
  VALUES (1), (2), (3), (4), (5)
) vals(v)
ON (somevalue = v);

Namun, perhatikan bahwa menggunakan VALUES cara ini adalah ekstensi PostgreSQL, sedangkan IN , atau menggunakan tabel sementara, adalah standar SQL.

Lihat pertanyaan terkait ini:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cara memilih hanya nilai unik dari tabel terkait

  2. LOWER() – Konversikan ke Huruf Kecil di PostgreSQL

  3. Postgres membuat Tabel dengan array kunci asing

  4. Cara melihat kursor yang mendasari kueri aktif

  5. Perbedaan antara indeks GiST dan GIN