Apakah ada keuntungan kinerja dengan menangani data dengan prosedur tersimpan selain memasukkannya ke dalam fungsi setelah pengambilan?

8

Judul merangkumnya. Saya cukup kaya dengan PHP, dan nyaman mendapatkannya untuk melakukan apa yang saya butuhkan dengan nilai-nilai yang ditarik dari MySQL, namun untuk kepentingan memperluas pengetahuan saya, saya bertanya-tanya apakah mungkin itu akan menjadi teknik yang lebih efisien dalam jangka panjang. Apakah mereka setara (karena kira-kira jumlah pemrosesan yang sama pada akhirnya), atau adakah kasus-kasus di mana satu menyajikan keuntungan yang berbeda dari yang lain?

Kaji
sumber
3
Pertanyaan bagus & diskusi lama .. berapa banyak yang akan ada di sisi APP, berapa banyak yang akan dilakukan di sisi DB. Anda mungkin ingin mengubah kata menjadi "RDBMS ke APP-Layer", karena pertanyaannya berlaku untuk semua jenis interaksi DB dan APP.
Sebastian Roth
2
Saya ingin menambahkan pertanyaan ini dengan sangat buruk, tetapi tidak ada yang menarik untuk saya tambahkan. Ini adalah pertanyaan yang bagus, dan saya tidak keberatan menjadi faq kanonik
jcolebrand
Saya sebenarnya bermaksud mengajukan pertanyaan ini, apakah itu akan menjadi topik utama di sini untuk DBA. Saya mencari sesuatu yang sangat berbeda dan menemukan ini secara tidak sengaja. Jadi +1 untuk membaca pikiranku
Derek Downey

Jawaban:

6

Itu sangat tergantung pada apa yang Anda lakukan dengan catatan, dan seperti apa arsitektur jaringan Anda. Misalnya, jika prosedur tersimpan akan mengurangi jumlah keseluruhan data yang dikirim dari MySQL ke PHP, dan Anda memiliki tautan yang relatif lambat antara instance PHP dan database, SP pasti dapat membantu Anda.

Saya akan merekomendasikan Anda mulai dengan beberapa manipulasi 'lebih berat' yang Anda lakukan untuk data Anda di sisi PHP, lihat apa yang dapat Anda tulis sebagai SP, dan kemudian membandingkannya.

TML
sumber
5

Suatu titik dalam mendukung melakukan lebih banyak pemrosesan dalam database adalah bahwa database tidak dapat mengoptimalkan apa yang tidak terlihat. Sebagai contoh, mengatur properti dari kelas yang tetap ke nilai konstan untuk semua instance pasti akan berkinerja lebih baik jika dilakukan di lapisan database.

Satu hal yang bertentangan adalah bahwa database bagus untuk operasi berbasis set, tetapi tidak begitu baik untuk operasi berbasis baris. Misalnya, sesuatu seperti mengonversi waktu UTC ke waktu lokal berdasarkan zona waktu yang bervariasi per baris mungkin tidak berfungsi dengan baik di database seperti di lapisan aplikasi.

Larry Coleman
sumber
Poin bagus tentang pengoptimal.
TML
2

Biasanya jika hasilnya adalah agregasi, (jumlah, rata-rata, hitung) itu jauh lebih cepat untuk dihitung di server database, dengan menghindari komunikasi yang tidak perlu antara server dan klien. Selain itu, pemesanan dan pengelompokan dapat memanfaatkan indeks, mengurangi jumlah perhitungan.

Razvan Popovici
sumber