Beberapa orang mencoba menghindari NULL
nilai, mengklaim logika akan membingungkan.
Saya bukan salah satu dari mereka. NULL
nilai baik-baik saja untuk kolom tanpa data. Mereka tentu saja merupakan cara termurah untuk menyimpan kolom "kosong" - untuk ruang disk serta kinerja (efek utamanya adalah tabel dan indeks yang lebih kecil):
- Apakah tidak menggunakan NULL di PostgreSQL masih menggunakan bitmap NULL di header?
- Apakah menyetel "NOT NULL" pada kolom di postgresql meningkatkan kinerja?
- Apakah kolom nullable menempati ruang tambahan di PostgreSQL?
Setelah Anda mengerti sifat NULL
nilai, tidak ada alasan untuk menghindarinya. Postgres menawarkan berbagai fungsi untuk menangani NULL. colaesce()
, nullif()
, concat()
, concat_ws()
, ...
Secara umum, sejauh kinerja yang bersangkutan, batasan NOT NULL mengalahkan PERIKSA batasan dan keduanya mengalahkan pemicu oleh tembakan log. Tetapi bahkan pemicu sederhana pun murah. Biaya NOT NULL
kendala hampir tidak ada. Selain itu, semua ini hanya memengaruhi operasi tulis, tetapi di sebagian besar aplikasi, operasi baca mendominasi.
Oleh karena itu, dampak paling relevan pada kinerja (indeks dan kueri suboptimal) adalah ukuran tabel dan indeks atau, yang lebih penting, jumlah tupel per halaman data . Tuple yang lebih besar menghasilkan kinerja yang lebih lambat untuk sebagian besar kasus penggunaan. Jumlah halaman data yang harus dibaca untuk memenuhi permintaan meningkat. Memori cache yang tersedia sudah jenuh sebelumnya.
Saya tidak memiliki tolok ukur yang siap, tetapi yang terbaik adalah menguji lingkungan khusus Anda. Ini hanya aturan praktis sederhana. Realitas jauh lebih kompleks.