Mam tabelę z 490 wierszami M i 55 GB miejsca na stole, czyli około 167 bajtów na wiersz. Tabela ma trzy kolumny: a VARCHAR(100)
, a DATETIME2(0)
i a SMALLINT
. Średnia długość tekstu w VARCHAR
polu wynosi około 21,5, więc nieprzetworzone dane powinny mieć około 32 bajtów na wiersz: 22 + 2 dla VARCHAR
, 6 dla DATETIME2
i 2 dla 16-bitowej liczby całkowitej.
Pamiętaj, że powyższe miejsce to tylko dane, a nie indeksy. Używam wartości zgłoszonej w obszarze Właściwości | Przechowywanie | Ogólne | Przestrzeń danych.
Oczywiście musi być trochę narzutu, ale 135 bajtów na wiersz wydaje się dużo, szczególnie w przypadku dużego stołu. Dlaczego to może być? Czy ktoś jeszcze widział podobne mnożniki? Jakie czynniki mogą wpłynąć na ilość wymaganej dodatkowej przestrzeni?
Dla porównania próbowałem stworzyć tabelę z dwoma INT
polami i 1 M rzędami. Wymagane miejsce na dane wyniosło 16,4 MB: 17 bajtów na wiersz, w porównaniu do 8 bajtów surowych danych. Innym tabeli test o INT
i VARCHAR(100)
wypełniona samego tekstu jako rzeczywistym stole wykorzystuje 39 bajtów w rzędzie (44) K wierszy, w których byłoby oczekiwać 28 Plus trochę.
Tak więc stół produkcyjny ma znacznie więcej kosztów ogólnych. Czy to dlatego, że jest większy? Spodziewałbym się, że rozmiary indeksu będą w przybliżeniu N * log (N), ale nie rozumiem, dlaczego przestrzeń wymagana dla danych rzeczywistych jest nieliniowa.
Z góry dziękuję za wszelkie wskazówki!
EDYTOWAĆ:
Wszystkie wymienione pola są NOT NULL
. Tabela rzeczywista ma klastrowane PK na VARCHAR
polu i DATETIME2
polu, w tej kolejności. Dla dwóch testów pierwszym INT
był (klastrowany) PK.
Jeśli ma to znaczenie: tabela jest zapisem wyników ping. Te pola to URL, data / godzina pingowania i opóźnienie w milisekundach. Dane są stale dodawane i nigdy nie aktualizowane, ale dane są okresowo usuwane, aby ograniczyć je do zaledwie kilku rekordów na godzinę na adres URL.
EDYTOWAĆ:
Bardzo interesująca odpowiedź tutaj sugeruje, że dla indeksu z dużą ilością czytania i pisania przebudowa może nie być korzystna. W moim przypadku zajmowane miejsce jest problemem, ale jeśli ważniejsza jest wydajność zapisu, lepiej byłoby mieć luźne indeksy.