Saya harus menyebutkan masalah dengan KERING di dunia basis data relasional. Basis data dirancang untuk berkinerja cepat dan baik menggunakan set-based logic dan melalui query yang besar. Prinsip KERING sering menyebabkan pengembang untuk menulis pertanyaan non-Sargable atau menggunakan logika Row-by-agonizing-Row untuk meningkatkan kode yang ada dalam berbagai situasi. KERING dan optimalisasi kinerja sering bertentangan dan di dunia basis data, kinerja biasanya jauh lebih penting daripada rawatan. Ini tidak berarti bahwa Anda tidak boleh menggunakan prinsip KERING sama sekali, hanya saja Anda harus menyadari bagaimana hal itu akan memengaruhi kegunaan keseluruhan basis data. Pengembang aplikasi penting terlebih dahulu dan kinerja kedua, pengembang basis data berpikir integritas data pertama, kinerja kedua, keamanan data ketiga (kinerja dan keamanan mungkin bertukar tempat di beberapa sistem).
Saya telah memperhatikan secara umum, bahwa semakin banyak lapisan abstraksi yang Anda masukkan ke dalam database, semakin lama semakin lambat permintaannya. Saya tidak mengatakan saya tidak berharap orang-orang yang merancang program basis data sendiri tidak melakukan pekerjaan yang lebih baik untuk memungkinkan pengembang untuk menggunakan KERING tanpa mempengaruhi seberapa baik kinerja database, tapi saya tidak merancang perangkat lunak database pada tingkat itu , jadi mungkin konflik antara abstraksi dan kinerja dalam database lebih sulit untuk diperbaiki daripada yang saya kira. Namun, kami harus bekerja dengan sistem karena mereka sedang dibangun. Kami dapat meminta implementasi yang lebih baik dari prinsip-prinsip KERING dalam rilis mendatang yang tidak juga akan membunuh kinerja (dan telah menjadi lebih baik selama bertahun-tahun tetapi masih bermasalah), tetapi sementara itu kita harus mempertimbangkan jika KERING adalah langkah yang tepat untuk database ini pada saat ini.
Tetapi seringkali fitur yang ingin Anda gunakan untuk memastikan prinsip KERING terpenuhi adalah orang-orang yang menyebabkan masalah luar biasa untuk basis data. Saya tidak mengatakan tidak pernah menggunakan KERING tetapi jangan berlebihan dengan itu.
Contoh dari apa yang saya bicarakan. Anda perlu melakukan impor data sejuta catatan sebulan sekali. Rekaman sudah bisa ditambahkan secara manual melalui antarmuka pengguna yang memanggil proc tersimpan. Proc ini, karena dirancang untuk impor rekaman tunggal, hanya menambahkan satu rekaman pada satu waktu. Menggunakan KERING untuk menghindari memasukkan kode di dua tempat, Anda menulis kursor untuk memanggil proc berulang kali daripada menulis impor berbasis set yang Anda butuhkan. Waktu untuk impor berlangsung dari 30 menit yang dibutuhkan menggunakan logika berbasis set ke 18 jam. Sekarang cara yang tepat untuk mematuhi KERING dalam hal ini adalah dengan memperbaiki proc untuk menangani impor rekaman mulitple. Sayangnya, sering kali tidak mungkin atau sangat sulit untuk mengirim array ke proc (tergantung pada ujung belakang db) dan dengan mengubah proc, Anda akhirnya melanggar aplikasi.
Fungsi skalar dan fungsi bernilai tabel juga digunakan untuk menerapkan prinsip KERING dan sekali lagi mereka dapat secara serius mempengaruhi kinerja terutama jika Anda perlu menggunakannya dengan cara yang mencegah indeks agar tidak berguna.
Tampilan juga bagus untuk mengimplementasikan KERING. Namun, jika Anda menerapkan KERING melalui penggunaan tampilan yang memanggil tampilan yang memanggil tampilan lain, Anda akan dengan cepat sampai ke titik di mana kueri akan habis waktu habis di bawah beban. Bahkan Anda mungkin akhirnya perlu menghasilkan set data jutaan catatan saat Anda hanya membutuhkan tiga di akhir. Jadi pandangan satu tingkat dari serangkaian gabungan kompleks untuk mengimplementasikan KERING bisa menjadi sangat baik (saya punya satu sendiri yang kami gunakan untuk memastikan semua pelaporan keuangan menggunakan kumpulan dasar tabel yang sama dan perhitungan hal-hal tertentu), lebih dari dua tingkat dan Anda perlu mempertimbangkan jika Anda membuat kekacauan kinerja.