it-swarm.asia

NULL atau NOT NULL secara default?

Di MySQL, apakah lebih baik untuk selalu mengizinkan nulls kecuali Anda tahu bidang diperlukan, atau selalu gunakan Not Null kecuali Anda tahu bidang akan berisi nulls? Atau tidak masalah?

Saya tahu di beberapa DBMS mereka mengatakan untuk menggunakan Not Null sebanyak mungkin karena membolehkan nulls memerlukan sedikit tambahan (atau byte?) per catatan untuk menyimpan status Null.

41
BenV

Dalam kebanyakan DB a NOT NULL kolom akan lebih efisien dalam hal data yang disimpan karena alasan yang Anda nyatakan, dan juga lebih efisien untuk kueri dan indeks - jadi kecuali Anda ingin mengizinkan NULL dalam kolom, Anda harus secara eksplisit melarangnya.

Akan ada sedikit implikasi kinerja, sebagai tambahan NOT NULL kendala akan berpotensi perlu diperiksa untuk setiap baris yang Anda pengaruhi dengan INSERT atau UPDATE tetapi karena sebagian besar basis data relatif ringan dan mudah dibaca, ini mungkin bukan masalah (waktu ekstra yang diambil mungkin tidak akan terlihat di bagaimanapun juga karena ini adalah operasi yang terikat CPU di mana sisa operasi insert/update akan terikat IO dan jadi lebih penting dibandingkan dengan botol-neck) dan ini memberi Anda beberapa data "gratis" yang memeriksa kode Anda (atau lainnya kode orang) tidak dapat secara tidak sengaja menempatkan NULL di mana kode lain tidak mengharapkan mereka dan karenanya dapat memberikan hasil yang salah di hadapan mereka.

Sunting: Seperti yang ditunjukkan Peter dalam komentarnya di atas adalah generalisme dan mungkin tidak berlaku untuk semua DMBSs, meskipun saya cukup yakin itu berlaku untuk mysql dan mssql. Komplikasi lain di area ini mungkin termasuk fitur seperti tabel jarang (seperti yang diterapkan MSSQL 2008 misalnya) yang akan mengubah dinamika kinerja kolom (tidak) yang dapat dibatalkan.

25
David Spillett

Anda harus membiarkan desain skema dan persyaratan aplikasi memandu keputusan ini. Perbedaan kinerja mungkin tidak terlihat pada kebanyakan kasus.

9