Apakah hubungan lebih lambat dari pada tabel yang besar dan tidak efisien?

8

Saya telah diminta dalam pekerjaan saya untuk melanggar bentuk normal pertama (mengulangi grup di kolom, menggunakan nilai kosong / nol) beberapa kali, "demi kekuatan pemrosesan komputer". Singkatnya, tabel "siswa" harus memiliki setidaknya 8 bidang kosong (misalnya telepon: telephone1, telephone2, telephone3 ...) alih-alih saran saya - tabel "telepon" yang menyimpan nomor telepon (dan kemungkinan metadata lainnya) dan kunci asing adalah nomor id siswa. Bos saya mengatakan bahwa lebih baik menyimpannya seperti itu karena "ada lebih sedikit siklus CPU dan itu penting di platform web", daripada menggunakan hubungan. Saya mengatakan bahwa, dalam kasus terburuk, ini dapat diabaikan.

Dalam contoh itu, menggunakan relasi (misalkan tabel diisi dengan banyak catatan di webapp berukuran sedang) terutama lebih lambat daripada menggunakan skema tabel semacam itu?

AeroCross
sumber
Saya percaya ini akan benar-benar lebih cepat untuk dilakukan seperti yang dikatakan bos Anda, tetapi Anda memiliki tugas yang sangat sulit untuk memastikan Anda tidak mendapatkan anomali yang diperbarui. Tapi itu bisa membuat lebih banyak cpu berfungsi jika Anda perlu mengubah sepotong data yang umum untuk tabel (ala mengubah kode area untuk semua nomor telepon ...)
Patrick
3
Saya sangat ragu, pada perangkat keras modern, asalkan Anda mengindeks kunci asing Anda bahwa CPU tambahan bahkan akan dapat diukur, terutama di sisi lain dari server web. Di situs saya, kami telah menormalkan tabel dan melayani dengan baik utara 50.000 hit / detik tanpa berkeringat. Katakan pada atasan Anda untuk tetap bermain golf dan serahkan keputusan teknis kepada Anda!
Gayus
1
@ Patrick Apakah Anda percaya bahwa ini jauh lebih cepat atau hanya sedikit lebih cepat? Dan saya pikir sama seperti @ Gayus - pada perangkat keras modern, bahkan jika "lebih cepat", perolehan kecepatan dan daya tahan perangkat keras dapat diabaikan.
AeroCross
1
Saya pikir peningkatan kecepatan tidak penting. Hanya jika Anda memiliki kumpulan data besar dan melakukan penggabungan yang konyol, Anda akan melihat perbedaan kinerja yang nyata.
Patrick

Jawaban:

10

Saya tidak melihat bagaimana orang bisa membuat pernyataan seperti itu tanpa memiliki fakta aktual untuk mendukungnya. Jika pertanyaan Anda terikat dengan CPU, maka Anda harus mencari cara untuk mengurangi hambatan itu.

Kedengarannya seolah-olah bos Anda merasa bahwa database denormalized akan berkinerja terbaik, tetapi saya tidak cukup tahu tentang aplikasi Anda untuk mengatakan apakah itu benar atau tidak. Berapa jumlah yang diharapkan dari penghapusan, pembaruan, dan sisipan untuk tabel ini?

Saya berharap bahwa desain denormalized seperti itu dapat mengakibatkan berkurangnya jumlah waktu CPU tetapi akan mengharapkan bahwa I / O disk Anda akan meningkat. Dan pembacaan fisik dari disk akan jauh lebih mahal daripada siklus CPU, jadi mungkin bos Anda memiliki metrik yang sangat spesifik untuk dipenuhi (CPU) dan akibatnya ingin desain yang sangat spesifik? Jika demikian, saya hanya akan membangun apa yang diminta dan menyimpan metrik pada biaya CPU untuk kueri yang dijalankan. Jika Anda melihat peningkatan waktu maka Anda mungkin ingin menyarankan beberapa perubahan desain.

Bahkan, mungkin ide yang baik untuk mendapatkan daftar semua metrik yang ingin dilihat bos Anda, dan melacaknya dari waktu ke waktu.

SQLRockstar
sumber
Masalahnya adalah dia sekolah tua - pada zamannya (20 tahun?) Mungkin itu penting, seperti yang dia usulkan, tetapi perangkat keras dan lunak saat ini jauh, lebih kuat, dan, dengan desain, lebih cepat seperti itu. Sangat sulit untuk berurusan dengan seseorang seperti ini, karena ia memiliki kekuatan lebih, dan "fakta" empiris (tetapi ketinggalan jaman) bahwa itu lebih cepat, dan itu harus dianggap seperti itu.
AeroCross
1
dimengerti. coba buat dia untuk mendaftar metrik (CPU, disk I? O) yang dia inginkan diukur, dan apa yang dia anggap dapat diterima. kemudian cukup ukur barang-barang itu dan ketika keadaan serba salah Anda bisa menawarkan beberapa alternatif. dengan begitu Anda bisa mendapatkan desain yang lebih baik digunakan tanpa perlawanan; biarkan desainnya membuktikan sendiri seiring waktu. itu win-win, sebenarnya.
SQLRockstar