2010-12-28 20 views
13

Powiel możliwe:
Space used by nulls in databaseCzy wartości zerowe pozwalają zaoszczędzić miejsce do przechowywania?

Co bardziej efektywne pod względem miejsca?

  • A nullable int kolumna pełna zer.
  • int kolumna pełna zer.

Wiem, że kolumna zerowalna pobiera 1 dodatkowy bit informacji do przechowywania jego stanu zerowego, ale czy wartości null zapisać bazy danych z przydziału 32 bity dla int, który jest zerowy?

(null semantyki i znaczenie null nie są istotne dla tej kwestii)

+0

Pracuję z 2008 R2, ale jeśli inne wersje zachowują się inaczej, byłoby miło wiedzieć. –

+0

D'oh, szukałem "pustego miejsca", ale nie "pustej przestrzeni". Uzgodnione dla duplikatu, odpowiedzi tam odpowiadają na to pytanie. –

Odpowiedz

14

Dla stałych pól szerokości jak pustych int przestrzeń przechowywania wymagana jest zawsze taka sama, niezależnie od tego, czy wartość jest null lub nie.

Dla pól o zmiennej szerokości zerowej wartość 'NULL' zajmuje zero bajtów przestrzeni dyskowej (ignorując bit, aby zapisać, czy wartość jest pusta czy nie).

+0

Czy istnieje odniesienie do tego lub czy znasz go z dowodów eksperymentalnych? –

+7

Wiem, bo to się pyta prawie co tydzień. ;-) –

+0

Prawdopodobnie nie całkiem rozumiem *, gdy * przestrzeń dla kolumny (lub właściwie wiersza) jest zarezerwowana przez SQL Server, ale faktem jest, że dodanie kolumny nullable do ogromnej bazy danych jest w rzeczywistości natychmiastowe i robi Wydaje się, że obejmują one każdą alokację (co zdarza się, jeśli na przykład podasz wartość NOT NULL z wartością domyślną). Czy to oznacza, że ​​SQL Server przydzieli kilka spacji dla tej nowej kolumny, kiedy po raz pierwszy spróbujesz napisać wiersz zawierający tę wartość? – Groo

4

Jeśli używasz programu SQL Server 2008 i oczekujesz dużej liczby wartości NULL w kolumnach, proponuję Ci investigate Sparse Columns. Są zoptymalizowane do przechowywania wartości NULL.

3

SQL Server 2008 wprowadził Sparse columns dla kolumn, które są przede wszystkim NULL.

Kolumna SPARSE dla wiersza, która ma wartość NULL, wykorzystuje 0 bitów pamięci. Ale płacisz 4-bitową karę, jeśli istnieje wartość.

3

0 nie jest pusta. Jeśli nie masz wartości pola, nie trzymaj tam zero! Nie mogę powiedzieć, ile razy natknąłem się na błędy, które są w zasadzie nie do zastąpienia, ponieważ nie mamy możliwości dowiedzieć się, czy zera w produkcyjnej bazie danych były zerami rzeczywistymi, czy fałszywymi wartościami zerowymi. Embrace nulls - tak, wymagają one nieco więcej kodowania, ale mimo to obejmują je.

+1

W tym przypadku pole jest po prostu flagą aplikacji, a sprawdzanie wartości zerowej lub zerowej jest takie samo, a więc tylko kwestia pamięci. –

Powiązane problemy