Saya sedang mengembangkan program pelacakan siswa di mana saya harus menyimpan 15 nilai ujian.
Saya dapat menyimpan tanda sebagai string dan membaginya ketika saya perlu, untuk tujuan seperti melakukan operasi aritmatika. Namun, saya membutuhkan kinerja sebanyak mungkin.
Mana yang lebih baik? Bidang string tunggal, atau 15 bidang int individual?
database-design
query-performance
datatypes
mikrofon
sumber
sumber
Jawaban:
Jika Anda sudah berbicara tentang pemisahan dan komputasi, jangan simpan ini sebagai array.
Terlepas dari teori relasional dan aturan normalisasi tradisional dan dogma, itu hanya desain yang memberi Anda MINIMAL fleksibilitas.
Buat setiap hasil ujian berturut-turut.
Saya tidak mencoba mengantisipasi semuanya, tetapi ada sejumlah besar hal-hal yang lebih terperinci ini (dan, ya, dinormalisasi) dan hanya sedikit lebih banyak ruang yang memfasilitasi desain mahal yang mungkin atau mungkin tidak Anda perlukan sekarang dan mungkin atau mungkin tidak perlu di masa depan:
Membuang hasil tertinggi dan terendah? Anda harus mengiris array dan mengurutkannya.
Rata-rata? Anda harus mengirisnya dan menjumlahkannya
Analisis hasil ujian dengan ujian lintas siswa? Anda harus mengiris dan memutar
Menyortir untuk penghitungan (atau misalnya GCSE Inggris, di mana mungkin 7 As dan 2Bs)? Anda harus mengiris dan menyortir
Perhatikan bahwa semua pengirisan dan penyortiran ini datang sangat murah dalam desain yang diindeks dan dinormalisasi.
sumber
Untuk skor, berdasarkan kinerja, pemenang yang jelas menyimpannya secara numerik seperti ini;
Mudah untuk ditanyakan, mudah untuk diperbarui dan ditambahkan, dan super mudah dan cepat untuk melakukan agregat. Diberi pilihan "simpan informasi ini sebagai string yang harus saya bagi" atau "simpan dalam kolom" ... pemenangnya hampir selalu akan "disimpan dalam kolom" untuk sebagian besar kasus penggunaan di RDBMS.
sumber
selama Anda menggunakan int kecil (0 hingga 255) menggunakan char (15) atau 15 tinyint adalah sama (ukuran bijaksana). Jadi dari perspektif kinerja, gunakan 15 tinyints karena Anda menghemat ekstraksi dan penanganan string.
MEMPERBARUI
jika tanda adalah dua digit, Anda perlu CHAR (30) dan itu dua kali ukuran 15 kali tinyint.
sumber