Mam duży stół z powiedzmy 10 kolumnami. 4 z nich przez większość czasu pozostają nieważne. Mam zapytanie, które ma wartość null, która ma dowolny rozmiar lub nie ma rozmiaru w bajtach. Przeczytałem kilka artykułów, o których niektórzy z nich mówią:
http://www.sql-server-citation.com/2009/12/common-mistakes-in-sql-server-part-4.html
Istnieje błędne przekonanie, że jeśli mamy wartości NULL w tabeli, nie zajmuje to miejsca w pamięci. Faktem jest, że wartość NULL zajmuje miejsce - 2 bajty
SQL: Używanie wartości NULL w porównaniu z wartościami domyślnymi
NULL
Wartość w bazach danych jest wartością system, który zajmuje jeden bajt pamięci i wskazuje, że wartość nie jest obecna w przeciwieństwie do przestrzeni lub zero lub jakiejkolwiek innej wartości domyślnej.
Czy możesz mi pomóc w odniesieniu do rozmiaru przyjmowanego przez wartość zerową.
źródło
byte
(zazwyczaj 8 bitów). Tak więc w rzeczywistościbit
plikbyte
. Świetna odpowiedź Znak: +1.Poniższy link stwierdza, że jeśli kolumna ma zmienną długość, tj.
varchar
WtedyNULL
zajmuje 0 bajtów (plus 1 bajt jest używany do oznaczenia, czy wartość jest,NULL
czy nie):Powyższy link, jak również poniższy link, twierdzą, że dla kolumn o stałej długości, tj.
char(10)
Lubint
, wartośćNULL
zajmuje długość kolumny (plus 1 bajt do oznaczenia, czy jest,NULL
czy nie):Przykłady:
char(10)
naNULL
, zajmuje 10 bajtów (wyzerowane)int
zajmuje 4 bajty (również zerowane).varchar(1 million)
Zestaw doNULL
zajmuje bajty 0 (+ 2 bajty)Uwaga: w niewielkim stopniu rozmiar pamięci
varchar
to długość wprowadzonych danych + 2 bajty.źródło
Z tego linku :
źródło
Przechowywanie wartości NULL nie zajmuje miejsca.
To błędne przekonanie - to 2 bajty na wiersz i jestem prawie pewien, że wszystkie wiersze używają tych 2 bajtów, niezależnie od tego, czy są jakieś kolumny dopuszczające wartość null.
Mówi się ogólnie o bazach danych, a nie konkretnie o SQL Server. SQL Server nie używa 1 bajtu do przechowywania wartości NULL.
źródło