Odpowiedź Daniela koncentruje się na koszcie czytania poszczególnych wierszy. W tym kontekście: umieszczenie NOT NULL
kolumn o stałym rozmiarze na pierwszym miejscu w tabeli trochę pomaga. Umieszczenie odpowiednich kolumn na pierwszym miejscu (tych, o które pytasz) trochę pomaga. Minimalizacja wypełniania (z powodu wyrównywania danych) poprzez granie w tetris z kolumnami może trochę pomóc. Ale najważniejszy efekt nie został jeszcze wspomniany, szczególnie w przypadku dużych stołów.
Dodatkowe kolumny oczywiście powodują, że wiersz zajmuje więcej miejsca na dysku, dzięki czemu mniej wierszy mieści się na jednej stronie danych (domyślnie 8 kB). Poszczególne wiersze są rozmieszczone na większej liczbie stron. Aparat bazy danych generalnie musi pobierać całe strony, a nie pojedyncze wiersze . Nie ma znaczenia, czy poszczególne wiersze są nieco mniejsze, czy większe - o ile trzeba odczytać tę samą liczbę stron.
Jeśli zapytanie pobiera (względnie) niewielką część dużej tabeli, w której wiersze są rozmieszczone mniej więcej losowo w całej tabeli, obsługiwane przez indeks, spowoduje to mniej więcej taką samą liczbę odczytów strony, przy niewielkim uwzględnieniu do wielkości wiersza. Nieistotne kolumny nie spowalniają cię znacznie w takim (rzadkim) przypadku.
Zazwyczaj pobierane są łaty lub klastry wierszy wprowadzonych po kolei lub w pobliżu i udostępniane są strony danych. Te wiersze są rozłożone z powodu bałaganu, aby przeczytać więcej stron dysku, aby spełnić twoje zapytanie. Konieczność przeczytania większej liczby stron jest zazwyczaj najważniejszym powodem spowolnienia zapytania. I to jest najważniejszy czynnik, dlaczego nieistotne kolumny spowalniają twoje zapytania.
W dużych bazach danych zazwyczaj nie ma wystarczającej ilości pamięci RAM, aby utrzymać ją w pamięci podręcznej. Większe wiersze zajmują więcej pamięci podręcznej, więcej rywalizacji, mniej trafień w pamięci podręcznej, więcej operacji we / wy dysku. Odczyty dysku są zwykle znacznie droższe. Mniej w przypadku dysków SSD, ale pozostaje znaczna różnica. To dodaje do powyższego punktu dotyczącego odczytów strony.
To może, ale nie ma znaczenia, jeśli są nieistotne kolumny TOAST-ed. Odpowiednie kolumny mogą być również edytowane TOAST, przywracając wiele tego samego efektu.