Informacje zawarte w pytaniu dotyczące MyISAM są trafne. Chciałbym jednak odpowiedzieć na dwa dodatkowe pytania:
NAJNOWSZE PYTANIE
Według książki
Rozdział 10 :„Silniki pamięci masowej” Strona 196 Akapit 7 mówi
Na podstawie tego akapitu stary rekord zostaje nadpisany danymi powiązania tylko wtedy, gdy nowe dane do wstawienia nie mieszczą się w poprzednio przydzielonym bloku. Może to spowodować wiele nadętych rzędów.
DODATKOWE PYTANIE
Z mojej poprzedniej odpowiedzi byłoby wiele bloków, które mają
- blok przestrzeni
- długość rekordu
- liczba niewykorzystanych bajtów w bloku
- Flagi wskaźnika wartości NULL
- ewentualnie wskaźnik do kontynuacji rekordu, jeśli rekord nie mieścił się we wcześniej utworzonej przestrzeni i musiał zostać podzielony
Takie łącza do rekordów zaczynałyby się przed każdym wierszem, w którym wstawiane są zbyt duże dane. Może to nadwyrężyć tabele MyISAM .MYD
plik bardzo szybko.
SUGESTIE
Domyślnym formatem wiersza MyISAM jest dynamiczny. Gdy tabela jest dynamiczna i zawiera wiele operacji WSTAWIANIA, AKTUALIZACJI i USUŃ, taka tabela musiałaby zostać zoptymalizowana za pomocą
OPTIMIZE TABLE mytable;
Istnieje alternatywa:zmień format wiersza tabeli na Stały. W ten sposób wszystkie rzędy mają ten sam rozmiar. W ten sposób ustawiasz format wiersza Stały:
ALTER TABLE mytable ROW_FORMAT=Fixed;
Nawet w przypadku formatu Fixed Row, lokalizacja dostępnego rekordu musi zająć trochę czasu, ale czas byłby równy czasowi wyszukiwania O(1) (mówiąc językiem laika, zlokalizowanie dostępnego rekordu zajęłoby tyle samo czasu, bez względu na liczbę wierszy tabela zawiera lub ile jest usuniętych wierszy). Możesz ominąć ten krok, włączając concurrent_insert w następujący sposób:
Dodaj to do my.cnf
[mysqld]
concurrent_insert = 2
Restart MySQL nie jest wymagany. Po prostu uruchom
mysql> SET GLOBAL concurrent_insert = 2;
Spowodowałoby to, że wszystkie WSTAWKI znalazłyby się z tyłu tabeli bez szukania wolnego miejsca.
Zaleta tabel o stałych wierszach
- WSTAWIANIE, AKTUALIZACJA i USUWANIE byłyby nieco szybsze
- SELECT są o 20-25% szybsze
Oto niektóre z moich postów na temat szybszego działania SELECT w związku z naprawianymi formatami wierszy
May 03, 2012
:Co jest szybsze, InnoDB lub MójISAM?Sep 20, 2011
:Najlepsze z MyISAM i InnoDBMay 10, 2011
:Jaki jest wpływ na wydajność używania CHAR vs VARCHAR w polu o stałym rozmiarze?
Wady tabel ze stałymi wierszami
W większości przypadków po uruchomieniu ALTER TABLE mytable ROW_FORMAT=Fixed;
, stół może urosnąć 80-100%. .MYI
plik (strony indeksowe dla tabeli MyISAM) również rósł w tym samym tempie.
EPILOG
Jeśli potrzebujesz szybkości przy stołach MyISAM i możesz żyć z większymi stołami, potrzebne będą moje alternatywne sugestie. Jeśli chcesz zaoszczędzić miejsce dla każdej tabeli MyISAM, pozostaw format wiersza bez zmian (dynamiczny). Będziesz musiał skompresować tabelę za pomocą OPTIMIZE TABLE mytable;
częściej w przypadku tabel dynamicznych.