2011-06-27 12 views
6

Używam InnoDB wtyczki w formacie Barracuda z:MySQL/InnoDB Plugin: Czy wartości NULL dla pól VARCHAR nadal zajmują przestrzeń dyskową?

ROW_FORMAT=DYNAMIC

Gdybym zdefiniować pole jak VARCHAR(255), a następnie włóż płytę, która ma NULL wartość dla tego pola, będzie tej płyty nadal użyć 255 bajtów w pamięci dla pola VARCHAR? Czy nie będzie zmarnowanego miejsca do przechowywania?

W powiązanej notatce, jeśli zdefiniuję pole jako INT, przypuszczalnie każdy rekord będzie nadal używał 32 bitów dla tego pola, nawet jeśli jego wartość to NULL. Czy to jest poprawne?

Dzięki

Odpowiedz

6

myślę, że to powinno odpowiedzieć na pytanie -

SQL NULL rezerw wartość jeden lub dwa bajty w katalogu zapisu. Poza tym, wartość SQL NULL rezerwuje zero bajtów w części danych rekordu, jeśli jest przechowywana w kolumnie o zmiennej długości. W kolumnie o stałej długości rezerwuje ona stałą długość kolumny w części danych rekordu. Zarezerwowanie stałej przestrzeni dla wartości NULL umożliwia wykonanie aktualizacji kolumny z wartości NULL na wartość inną niż NULL w miejscu bez powodowania fragmentacji strony indeksu.

Proszę sprawdzić więcej na data-type storage requirements i InnoDB physical row structure