Saya memiliki meja besar dengan katakanlah 10 kolom. 4 dari mereka tetap nol sebagian besar waktu. Saya memiliki kueri yang tidak mengambil ukuran apa pun atau tidak ada ukuran dalam byte. Saya membaca beberapa artikel yang beberapa di antaranya mengatakan:
http://www.sql-server-citation.com/2009/12/common-mistakes-in-sql-server-part-4.html
Ada kesalahpahaman bahwa jika kita memiliki nilai NULL dalam tabel itu tidak menempati ruang penyimpanan. Faktanya adalah, nilai NULL menempati ruang - 2 byte
SQL: Menggunakan nilai NULL vs. nilai default
Sebuah
NULL
nilai dalam database adalah sistem nilai yang mengambil satu byte dari penyimpanan dan menunjukkan bahwa nilai yang tidak hadir sebagai lawan dari ruang atau nol atau nilai default lainnya.
Bisakah Anda membimbing saya mengenai ukuran yang diambil oleh nilai nol.
sumber
byte
(biasanya 8 bit). Jadi pada kenyataannya, abit
mengambil abyte
. Jawaban bagus Mark: +1.Tautan berikut mengklaim bahwa jika kolom memiliki panjang variabel, yaitu
varchar
kemudianNULL
mengambil 0 byte (ditambah 1 byte digunakan untuk menandai apakah nilainyaNULL
atau tidak):Tautan di atas, serta tautan di bawah, mengklaim bahwa untuk kolom dengan panjang tetap, yaitu
char(10)
atauint
, nilaiNULL
menempati panjang kolom (ditambah 1 byte untuk menandai apakah ituNULL
atau tidak):Contoh:
char(10)
keNULL
, itu menempati 10 byte (nol)int
membutuhkan 4 byte (juga dikosongkan).varchar(1 million)
setNULL
membutuhkan 0 byte (+ 2 byte)Catatan: sedikit bersinggungan, ukuran penyimpanan
varchar
adalah panjang data yang dimasukkan + 2 byte.sumber
Dari tautan ini :
sumber
Menyimpan nilai NULL tidak memakan tempat.
Ini adalah kesalahpahaman - itu 2 byte per baris , dan saya cukup yakin bahwa semua baris menggunakan 2 byte itu terlepas dari apakah ada kolom nullable.
Ini berbicara tentang database secara umum, bukan secara khusus SQL Server. SQL Server tidak menggunakan 1 byte untuk menyimpan nilai NULL.
sumber