Apa yang lebih efisien - menangani pernyataan kasus di sql atau menangani data yang sama menggunakan pernyataan if dalam kode. Saya bertanya karena kolega saya memiliki pertanyaan besar yang berisi banyak pernyataan kasus. Saya menyarankan dia untuk menghilangkan stres dari DB dengan mengkodekan pernyataan kasus. Menurut saya ini lebih efisien...tetapi mengapa?
Pernyataan Kasus versus pernyataan if yang dikodekan
Jawaban (5)
Ada pertanyaan mendasar yang tidak ditanyakan di sini: Apa yang sebenarnya dilakukan oleh pernyataan CASE
ini?
Lupakan kinerja sebentar. Jika CASE
hanya digunakan untuk mengubah hasil akhir kueri, dan sebenarnya dimungkinkan untuk mengganti fungsi yang sama dengan if
atau select case
di ASP, maka itu mungkin berarti kueri/prosedur database mencoba melakukan hal-hal yang UI harus bertanggung jawab, seperti pemformatan. Persoalan pemisahan kepentingan lebih serius dibandingkan persoalan kinerja apa pun yang mungkin terjadi.
Jika Anda memiliki pertanyaan seperti ini:
SELECT InvoiceID, InvoiceDate,
CASE WHEN PaidStatus = 0 THEN 'Unpaid' ELSE 'Paid' END
FROM ...
Ini konyol, karena UI, atau lapisan apa pun yang melakukan pemetaan data ke domain, harus mengetahui cara mengonversi status dalam database ke deskripsi yang sesuai. Tidak masuk akal untuk memasukkan logika ini ke dalam kueri itu sendiri.
Di sisi lain, jika konstruksi CASE
merupakan bagian penting dari kueri, seperti:
SELECT
SUM(CASE WHEN PaidStatus = 0 THEN Amount ELSE 0 END) AS TotalUnpaid,
SUM(CASE WHEN PaidStatus = 1 THEN Amount ELSE 0 END) AS TotalPaid
FROM ...
Jangan coba-coba memindahkan logika semacam ini ke UI, karena databasenya jauh lebih baik dalam hal itu. Dan CASE
secara semantik merupakan bagian dari kueri ("hitung total jumlah yang dibayar dan belum dibayar untuk x"), ia tidak mengambil alih fungsi UI apa pun.
Khawatirkan terlebih dahulu tentang di mana logika sebenarnya berada berdasarkan apa yang ingin dicapainya. Masalah kinerja hanya boleh didiskusikan jika Anda benar-benar melihat masalah kinerja yang signifikan.
CASE
pernyataan lebih disukai karena:
- SQL: Ini adalah standar ANSI, membuatnya portabel untuk database lain tanpa perlu perubahan
- mereka mendukung "hubungan arus pendek"
Menurut pengalaman saya, server basis data kami JAUH lebih besar daripada server aplikasi kami dan biasanya berada di bawah 30% dalam keadaan menganggur. Minta database mengelola data, lalu minta klien melakukan iterasi melalui resultSet. Praktik yang lebih baik adalah membuat database hanya mengembalikan data yang Anda perlukan (jika Anda dapat menentukannya terlebih dahulu).
Anda harus menanyakan (memfilter dan mengurutkan) data dalam database, dan menyerahkan presentasi ke tingkat presentasi. Hal ini disebabkan oleh dua alasan utama:
- Basis data dibuat untuk menyaring dan mengurutkan data
- Anda ingin menarik jumlah data paling sedikit melalui kabel dari DB jika diperlukan
Saat saya membaca, di sini pertanyaan dasarnya adalah apakah CASE lebih baik daripada IF di SQL. Jawabannya juga tergantung pada kedalaman kondisi Anda. Menemukan artikel bagus di sini. Mungkin bermanfaat bagi seseorang. http://www.4guysfromrolla.com/webtech/102704-1.shtml