Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Kolumna sparsowana

Termin Definicja
Kolumna sparsowana

Kolumna sparsowana to pole zoptymalizowane pod przechowywanie dużej liczby wartości pustych, oszczędzające miejsce.

Jak działa kolumna sparsowana w SQL Server

Kolumna sparsowana (ang. sparse column) jest mechanizmem Microsoft SQL Server przeznaczonym dla tabel, w których określona kolumna przyjmuje wartość NULL w bardzo dużej części wierszy. Zwykła kolumna może rezerwować miejsce zgodnie z typem danych, natomiast kolumna sparsowana wykorzystuje specjalny sposób przechowywania wartości. Wartości NULL nie zajmują wtedy pełnego miejsca przewidzianego dla danego typu kolumny, co może zmniejszyć rozmiar tabeli, jeżeli rzeczywistych wartości jest niewiele.

Mechanizm nie oznacza, że kolumna sparsowana jest po prostu kolumną opcjonalną. Każda kolumna dopuszczająca NULL może mieć puste wartości, ale tylko kolumna oznaczona słowem kluczowym SPARSE korzysta z wyspecjalizowanego formatu przechowywania. Przykładowa definicja ma postać ALTER TABLE dbo.Dokumenty ADD DataOdbioru date SPARSE NULL;. W tym przykładzie data jest zapisywana tylko w tych wierszach, dla których rzeczywiście istnieje, a brak daty jest reprezentowany przez NULL.

Kiedy oszczędność miejsca jest rzeczywista

Kolumna sparsowana przynosi korzyść przede wszystkim wtedy, gdy większość rekordów nie zawiera żadnej wartości w danym polu. Dotyczy to na przykład tabel opisujących wiele opcjonalnych cech obiektów, gdzie jeden rekord korzysta tylko z niewielkiej części dostępnych atrybutów. Jeżeli jednak kolumna zawiera wartości w dużej części wierszy, oszczędność może zniknąć, ponieważ zapis niepustej wartości w kolumnie sparsowanej ma dodatkowy narzut magazynowy względem zwykłej kolumny.

Dokładny efekt zależy od typu danych, liczby rekordów, udziału wartości NULL oraz sposobu kompresji i indeksowania tabeli. Dla kolumny sparsowanej istotne jest więc porównanie rozmiaru rzeczywistej tabeli, a nie założenie, że oznaczenie SPARSE zawsze zmniejszy bazę. Jeżeli prawie każdy wiersz zawiera wartość, dodatkowe informacje potrzebne do obsługi formatu sparsowanego mogą zwiększyć zużycie miejsca. Projektowanie tabeli powinno uwzględniać przewidywany rozkład danych, a nie wyłącznie nazwę mechanizmu.

Odczyt, zapis i indeksowanie wartości NULL

W zapytaniach kolumna sparsowana zachowuje się jak zwykła kolumna tego samego typu. Można używać jej w warunkach IS NULL i IS NOT NULL, porównywać ją z wartościami, sortować wyniki oraz aktualizować instrukcją UPDATE. Przykładowe zapytanie SELECT * FROM dbo.Dokumenty WHERE DataOdbioru IS NOT NULL; zwróci rekordy, w których data została zapisana. Sama oszczędność miejsca nie zmienia zasad logiki trójwartościowej SQL Server: porównanie wartości z NULL nie daje wyniku prawdziwego, dlatego do sprawdzania pustego pola służy IS NULL, a nie operator równości.

Kolumny sparsowane mogą być indeksowane, ale wybór indeksu powinien wynikać z rzeczywistych zapytań i selektywności danych. Indeks na polu, które niemal zawsze ma wartość NULL, może być użyteczny, gdy zapytania często wyszukują niewielką grupę rekordów z wartością, lecz może też zwiększać koszt zapisu i zajmować dodatkowe miejsce. Przy diagnozowaniu problemów z wydajnością należy sprawdzić plan wykonania, statystyki oraz częstotliwość operacji odczytu i modyfikacji. Nie należy zakładać, że samo użycie kolumny sparsowanej automatycznie przyspieszy zapytania.

Kolumna zestawiająca i kontrola projektu tabeli

SQL Server udostępnia również mechanizm column set, czyli kolumnę zestawiającą, która pozwala traktować wiele kolumn sparsowanych jako pojedynczy zestaw danych w formacie XML. Kolumna zestawiająca jest tworzona jako kolumna obliczana zarządzana przez SQL Server i może ułatwiać pracę z tabelami posiadającymi dużą liczbę opcjonalnych atrybutów. Nie zastępuje ona jednak zwykłych kolumn sparsowanych: wartości nadal należą do konkretnych pól, a sposób zapisu i odczytu przez aplikację musi uwzględniać strukturę tabeli.

Przed zastosowaniem tego rozwiązania trzeba zweryfikować zgodność używanych typów danych, ograniczenia indeksów, wymagania aplikacji oraz wpływ na kopie zapasowe i migracje schematu. Warto również ustalić, czy problem rzeczywiście wynika z dużej liczby pustych pól. W wielu przypadkach bardziej odpowiedni może być model relacyjny z tabelą wartości opcjonalnych, ale taka decyzja zależy od relacji między atrybutami, oczekiwanych zapytań i integralności danych. Kolumna sparsowana jest konkretną funkcją SQL Server, a nie uniwersalnym zamiennikiem normalizacji tabeli.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę