Zależy to od używanego silnika pamięci masowej.
W formacie MyISAM każdy nagłówek wiersza zawiera pole bitowe z jednym bitem dla każdej kolumny do kodowania stanu NULL. Kolumna o wartości NULL nadal zajmuje miejsce, więc wartości NULL nie zmniejszają ilości miejsca na dane. Zobacz https://dev.mysql.com/doc/internals/ pl/myisam-wprowadzenie.html
W InnoDB każda kolumna ma „przesunięcie początku pola” w nagłówku wiersza, czyli jeden lub dwa bajty na kolumnę. Wysoki bit w tym przesunięciu początku pola jest włączony, jeśli kolumna ma wartość NULL. W takim przypadku kolumna nie musi być w ogóle przechowywana. Więc jeśli masz dużo NULL, twoja pamięć powinna zostać znacznie zmniejszona. Zobacz https://dev.mysql.com/doc/internals/en/innodb-field-contents.html
EDYTUJ:
Bity NULL są częścią nagłówków wierszy, nie możesz ich dodawać.
Jedynym sposobem, w jaki mogę sobie wyobrazić, że wartości NULL poprawiają wydajność, jest to, że w InnoDB strona danych może zmieścić więcej wierszy, jeśli wiersze zawierają wartości NULL. Więc twoje bufory InnoDB mogą być bardziej efektywne.
Ale byłbym bardzo zaskoczony, gdyby w praktyce zapewniło to znaczną przewagę wydajności. Martwienie się o wpływ NULL na wydajność leży w sferze mikrooptymalizacji. Powinieneś skupić swoją uwagę gdzie indziej, w obszarach, które dają większy zwrot z każdej zainwestowanej złotówki. Na przykład dodanie dobrze dobranych indeksów lub zwiększenie alokacji pamięci podręcznej bazy danych.