Różnica tak naprawdę ma znaczenie tylko dla MyISAM, inne silniki pamięci masowej nie dbają o tę różnicę.EDYTUJ: Wielu użytkowników zauważyło, że InnoDB dba:link 1 przez parowy , link 2 autorstwa Kaana .
Dzięki MyISAM z rzędami o stałej szerokości istnieje kilka zalet:
-
Brak fragmentacji wierszy:w przypadku wierszy o zmiennej szerokości można podzielić pojedyncze wiersze na wiele sekcji w pliku danych. Może to zwiększyć liczbę wyszukiwań dysków i spowolnić operacje. Można go defragmentować za pomocą OPTIMIZE TABLE, ale nie zawsze jest to praktyczne.
-
Rozmiar wskaźnika pliku danych:W MyISAM istnieje koncepcja wskaźnika pliku danych, który jest używany, gdy musi odwoływać się do pliku danych. Na przykład jest to używane w indeksach, gdy odnoszą się do miejsca, w którym faktycznie znajduje się wiersz. Przy rozmiarach o stałej szerokości ten wskaźnik jest oparty na przesunięciu wiersza w pliku (tj. wiersze mają rozmiar 1, 2, 3 niezależnie od ich rozmiaru). Przy zmiennej szerokości wskaźnik jest oparty na przesunięciu bajtów (tzn. wiersze mogą mieć 1, 57, 163). W rezultacie przy dużych stołach wskaźnik musi być większy, co potencjalnie zwiększa obciążenie tabeli.
-
Łatwiejsze do naprawienia w przypadku korupcji. Ponieważ każdy wiersz ma ten sam rozmiar, jeśli twoja tabela MyISAM ulegnie uszkodzeniu, naprawa jest znacznie łatwiejsza, więc stracisz tylko dane, które są faktycznie uszkodzone. W przypadku zmiennej szerokości teoretycznie możliwe jest, że wskaźniki o zmiennej szerokości zostaną pomieszane, co może skutkować niewłaściwym wprowadzaniem danych.
Teraz podstawową wadą stałej szerokości jest to, że marnuje więcej miejsca. Na przykład musisz użyć pól CHAR zamiast pól VARCHAR, więc w rezultacie zajmiesz dodatkowe miejsce.
Zwykle nie będziesz miał dużego wyboru formatu, ponieważ jest on podyktowany na podstawie schematu. Jednak może być opłacalne, jeśli masz tylko kilka varcharów lub pojedynczy blob/tekst, aby spróbować zoptymalizować pod tym kątem. Rozważ na przykład zamianę jedynego varchar na char lub podziel obiekt blob na jego własną tabelę.
Możesz przeczytać jeszcze więcej na ten temat pod adresem:
http://dev.mysql.com/doc/refman /5.0/pl/static-format.html
http://dev.mysql.com/doc/refman /5.0/pl/dynamic-format.html