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

Go sql - cakupan pernyataan yang disiapkan

Pernyataan yang disiapkan adalah agar Anda dapat menjalankan perintah SQL berulang yang mungkin hanya berbeda dalam nilai parameter misalnya.

Mereka tidak dimaksudkan untuk hidup "lama" karena pernyataan yang disiapkan dapat (mereka melakukannya jika dipanggil dari suatu transaksi) memesan koneksi database aktif ("panjang" berarti ketika mereka tidak digunakan; tidak apa-apa untuk mengeksekusi pernyataan yang disiapkan secara berulang-ulang. kali bahkan jika ini akan memakan waktu lama). Sambungan adalah sumber daya yang mahal dan hanya boleh ditahan selama diperlukan. Hanya dengan membuat sekumpulan pernyataan yang telah disiapkan dan tidak menutupnya, Anda dapat kehabisan koneksi aktif/diizinkan dan kemudian memblokir komunikasi lebih lanjut ke server db.

Gunakan pernyataan yang sudah disiapkan jika Anda ingin menjalankan insert . yang sama , update atau select pernyataan dengan parameter yang berbeda beberapa kali dalam satu permintaan (HTTP). Jangan gunakan pernyataan siap pakai untuk melampaui permintaan (HTTP).

Dalam implementasi driver tertentu dan server database, pernyataan yang disiapkan mungkin juga melibatkan sumber daya yang dialokasikan pada server DB itu sendiri (bukan dalam aplikasi Go). Misalnya, pernyataan yang disiapkan dapat dikompilasi sebelumnya di server DB dan server mungkin menyiapkan rencana eksekusi kueri, mengalokasikan sumber daya tertentu seperti memori untuk itu. Ini dapat dicadangkan secara permanen sampai pernyataan yang disiapkan ditutup.

Ada artikel (diposting oleh Myles McDonnell dalam komentar di bawah) yang membahas detail implementasi Pernyataan yang Disiapkan di Pergi. Disebutkan bahwa jika pernyataan yang disiapkan tidak dibuat dari transaksi, mereka melepaskan koneksi kembali ke kumpulan koneksi, tetapi ketika diperlukan, mereka mencoba untuk menggunakan kembali yang sama yang mereka siapkan (karena jika server db membantu / juga berperan aktif dalam pernyataan yang disiapkan, itu terikat ke koneksi di sisi server). Jika tidak, mereka akan mempersiapkan kembali mereka pada koneksi baru (menyebabkan overhead kinerja yang tidak diinginkan).

Secara keseluruhan, apa yang Anda gambarkan adalah model yang berfungsi, dan jika Anda memiliki sedikit pernyataan siap yang diperlukan/dieksekusi dalam banyak permintaan berikutnya, itu bisa berarti waktu respons yang lebih singkat. Tetapi itu juga berarti bahwa di sisi lain dalam jangka panjang, mereka mungkin mengakibatkan bahwa semua pernyataan yang Anda siapkan akan disiapkan pada semua koneksi kumpulan. Putuskan apakah ini dapat diterima dalam kasus Anda.

Secara umum ini harus dihindari (dan pernyataan yang disiapkan ditutup sebelum akhir permintaan HTTP), tetapi jika Anda hanya memiliki beberapa dari mereka dan Anda membutuhkannya dalam banyak permintaan yang saling mengikuti, Anda dapat memindahkannya dari lingkup permintaan .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konversi DateTime ke Waktu NHibernate Postgresql

  2. Gunakan sesuatu seperti TOP dengan GROUP BY

  3. SQL mendapatkan nama yang tidak bekerja pada proyek

  4. Terlalu banyak pesanan berdasarkan, maks, subkueri untuk kecerdasan saya

  5. Postgres ERROR:tidak dapat membuka file untuk dibaca:Izin ditolak