Zanim zdecydujesz się na MyISAM lub InnoDB, będziesz musiał przejrzeć oba silniki pamięci masowej pod kątem tego, co każda pamięć podręczna
MyISAM
Podczas odczytu indeksy tabeli MyISAM można odczytać jeden raz z pliku .MYI i załadować do pamięci podręcznej kluczy MyISAM (o rozmiarze według parametru rozmiar_buforu_kluczy ). Jak możesz szybciej czytać tabelę MyISAM .MYD? Z tym:
ALTER TABLE mytable ROW_FORMAT=Fixed;
Pisałem o tym w moich poprzednich postach
InnoDB
OK, a co z InnoDB? Czy InnoDB wykonuje jakieś dyskowe operacje wejścia / wyjścia dla zapytań? Zaskakujące, że tak !! Prawdopodobnie myślisz, że jestem szalony, że to mówię, ale to absolutna prawda, nawet w przypadku zapytań SELECT . W tym momencie zapewne zastanawiasz się: „Jak, na świecie, InnoDB robi dyskowe operacje we / wy dla zapytań?”
Wszystko to wraca do tego, że InnoDB jest silnikiem transakcyjnym do przechowywania danych na podstawie ACID . Aby InnoDB, aby być transakcyjnych, musi wspierać I
in ACID
, który jest izolacja. Technika utrzymywania izolacji transakcji odbywa się za pośrednictwem MVCC, Multiversion Concurrency Control . Mówiąc najprościej, InnoDB rejestruje wygląd danych przed próbą ich zmiany przez transakcje. Gdzie to się rejestruje? W systemowym pliku obszaru tabel, lepiej znanym jako ibdata1. To wymaga dysku I / O .
PORÓWNANIE
Ponieważ zarówno InnoDB, jak i MyISAM robią dyskowe operacje we / wy, jakie losowe czynniki decydują o tym, kto jest szybszy?
- Rozmiar kolumn
- Format kolumny
- Zestawy znaków
- Zakres wartości liczbowych (wymagające wystarczająco dużych liczb całkowitych)
- Rzędy dzielone na bloki (łączenie rzędów)
- Fragmentacja danych spowodowana przez
DELETEs
iUPDATEs
- Rozmiar klucza podstawowego (InnoDB ma indeks klastrowany, wymagający dwóch odnośników)
- Rozmiar wpisów indeksu
- i tak dalej...
EPILOG
W związku z tym w środowisku intensywnego odczytu istnieje możliwość, że tabela MyISAM ze stałym formatem wierszy przewyższa odczyt InnoDB z puli buforów InnoDB, jeśli w dziennikach cofania zawartych w ibdata1 zapisywana jest wystarczająca ilość danych do obsługi zachowania transakcyjnego nałożone na dane InnoDB. Zaplanuj dokładnie typy danych, zapytania i silnik pamięci masowej. Gdy dane rosną, przenoszenie danych może być bardzo trudne.
Nawiasem mówiąc, napisałem coś takiego 5 dni temu: Jak przypisać limit pamięci dla mySQL?