Silniki magazynowania są komponentami MySQL, które obsługują operacje SQL dla różnych typów tabel. InnoDB
jest domyślnym i najbardziej uniwersalnym silnikiem magazynowym, a Oracle zaleca używanie go dla tabel z wyjątkiem wyspecjalizowanych przypadków użycia. (Polecenie CREATE TABLE
w MySQL 8.0 domyślnie tworzy tabele InnoDB
).
Serwer MySQL wykorzystuje architekturę silnika magazynowego, która umożliwia ładowanie i usuwanie silników z uruchomionego serwera MySQL.
Aby określić, które silniki magazynowania obsługuje serwer, użyj polecenia SHOW ENGINES
. Wartość w kolumnie Support
wskazuje, czy silnik może być używany. Wartość YES
, NO
lub DEFAULT
oznacza, że silnik jest dostępny, niedostępny lub dostępny i obecnie ustawiony jako domyślny silnik pamięci masowej.
mysql> SHOW ENGINES\G*************************** 1. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance SchemaTransactions: NO XA: NO Savepoints: NO*************************** 2. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keysTransactions: YES XA: YES Savepoints: YES*************************** 3. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tablesTransactions: NO XA: NO Savepoints: NO*************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears)Transactions: NO XA: NO Savepoints: NO*************************** 5. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engineTransactions: NO XA: NO Savepoints: NO...
Rozdział ten omawia przypadki użycia specjalnych silników MySQL. Nie dotyczy on domyślnego InnoDB
lub NDB
silnika magazynowego, które zostały omówione w rozdziale 15, Silnik magazynowy InnoDB oraz rozdziale 23, MySQL NDB Cluster 8.0. Dla zaawansowanych użytkowników zawiera również opis architektury pluggable storage engine (zobacz Sekcja 16.11 „Architektura MySQL Storage Engine”).
Informacje na temat funkcji oferowanych w komercyjnych wersjach serwera MySQL znajdują się w dziale Edycje MySQL, na stronie internetowej MySQL. Dostępne silniki pamięci masowej mogą zależeć od tego, której edycji MySQL używasz.
Odpowiedzi na najczęściej zadawane pytania dotyczące silników magazynowych MySQL znajdują się w sekcji A.2, „MySQL 8.0 FAQ: Silniki magazynowe”.
MySQL 8.0 Obsługiwane silniki magazynowe
-
InnoDB
: Domyślny silnik magazynowy w MySQL 8.0.InnoDB
jest bezpiecznym dla transakcji (zgodnym z ACID) silnikiem magazynowym dla MySQL, który posiada funkcje commit, rollback oraz crash-recovery chroniące dane użytkownika.InnoDB przechowuje dane użytkownika w indeksach klastrowych, aby zmniejszyć I/O dla typowych zapytań opartych na kluczach głównych. Aby zachować integralność danych, InnoDB
obsługuje również ograniczeniaFOREIGN KEY
referential-integrity constraints. Aby uzyskać więcej informacji na tematInnoDB
, zobacz Rozdział 15, Silnik pamięci masowej InnoDB. -
MyISAM
: Te tabele mają niewielką powierzchnię. Blokowanie na poziomie tabeli ogranicza wydajność w obciążeniach typu odczyt/zapis, dlatego jest często stosowane w obciążeniach typu tylko do odczytu lub głównie do odczytu w konfiguracjach sieci Web i hurtowni danych. -
Memory
: Przechowuje wszystkie dane w pamięci RAM, zapewniając szybki dostęp w środowiskach, które wymagają szybkiego wyszukiwania danych niekrytycznych. Ten silnik był wcześniej znany jako silnikHEAP
. Jego przypadki użycia maleją;InnoDB
ze swoim obszarem pamięci buffer pool zapewnia uniwersalny i trwały sposób przechowywania większości lub wszystkich danych w pamięci, aNDBCLUSTER
zapewnia szybkie odszukiwanie kluczy-wartości dla ogromnych rozproszonych zbiorów danych. -
CSV
: Jego tabele to tak naprawdę pliki tekstowe z wartościami rozdzielanymi przecinkami. Tabele CSV pozwalają importować lub zrzucać dane w formacie CSV, aby wymieniać dane ze skryptami i aplikacjami, które odczytują i zapisują ten sam format. Ponieważ tabele CSV nie są indeksowane, zazwyczaj podczas normalnej pracy przechowujesz dane w tabelachInnoDB
i używasz tabel CSV tylko na etapie importu lub eksportu. -
Archive
: Te kompaktowe, nieindeksowane tabele są przeznaczone do przechowywania i wyszukiwania dużych ilości rzadko odwoływanych informacji historycznych, archiwalnych lub audytu bezpieczeństwa. -
Blackhole
: Mechanizm przechowywania danych Blackhole przyjmuje, ale nie przechowuje danych, podobnie jak uniksowe urządzenie/dev/null
. Zapytania zawsze zwracają pusty zbiór. Tabele te mogą być używane w konfiguracjach replikacyjnych, w których instrukcje DML są wysyłane do serwerów replikujących, ale serwer źródłowy nie przechowuje własnej kopii danych. -
NDB
(znany również jakoNDBCLUSTER
): Ten klastrowany silnik bazy danych jest szczególnie przydatny w przypadku aplikacji wymagających najwyższego możliwego stopnia bezawaryjności i dostępności. -
Merge
: Umożliwia administratorowi lub programiście MySQL logiczne grupowanie serii identycznych tabelMyISAM
i odwoływanie się do nich jako do jednego obiektu. Dobre dla środowisk VLDB, takich jak hurtownie danych. -
Federated
: Oferuje możliwość łączenia oddzielnych serwerów MySQL w celu utworzenia jednej logicznej bazy danych z wielu serwerów fizycznych. Bardzo dobre dla środowisk rozproszonych lub data mart. -
Example
: Ten silnik służy jako przykład w kodzie źródłowym MySQL, który ilustruje, jak rozpocząć pisanie nowych silników pamięci masowej. Jest on interesujący przede wszystkim dla programistów. Silnik magazynowy jest „stubem”, który nic nie robi. Możesz tworzyć tabele, ale żadne dane nie mogą być w nich przechowywane ani z nich pobierane.
Nie jesteś ograniczony do używania tego samego silnika dla całego serwera lub schematu. Możesz określić mechanizm przechowywania danych dla każdej tabeli. Na przykład aplikacja może używać głównie tabel InnoDB
, z jedną tabelą CSV
do eksportowania danych do arkusza kalkulacyjnego i kilkoma tabelami MEMORY
dla tymczasowych przestrzeni roboczych.
Wybór silnika magazynowania
Różne silniki magazynowania dostarczone z MySQL są zaprojektowane z myślą o różnych przypadkach użycia. Poniższa tabela zawiera przegląd niektórych mechanizmów magazynowania MySQL, z uwagami wyjaśniającymi po tabeli.
Tabela 16.1 Storage Engines Feature Summary
Feature | MyISAM | Memory | InnoDB | Archive | NDB | ||
---|---|---|---|---|---|---|---|
B-.indeksy drzew | Tak | Tak | Tak | Nie | Nie | ||
Backup/punkt-w-czasie | Tak | ||||||
Indeksy klastrowane | Nie | Nie | Tak | Nie | Nie | Nie | |
Dane skompresowane | Tak (uwaga 2) | Nie | Tak | Tak | Tak | Nie | |
Pamięć podręczna danych | Nie | N/A | Tak | Tak | Nie | Tak | |
Dane szyfrowane | Tak (uwaga 3) | Tak (uwaga 3) | Tak (uwaga 3) | Tak (uwaga 4) | Tak (uwaga 3) | Tak (uwaga 3) | |
Obsługa kluczy obcych | Nie | Nie | Tak | Tak (uwaga 5) | |||
Wypełnij-indeksy wyszukiwania tekstowego | Tak | Nie | Tak (uwaga 6) | Nie | Nie | ||
Obsługa typów danych geoprzestrzennych obsługa typów danych | Tak | Nie | Tak | Tak | Tak | ||
Indeksowanie geoprzestrzenne wsparcie | Tak | Nie | Tak (uwaga 7) | Nie | Nie | ||
Indeksy Hash | Nie | Tak | Nie (uwaga 8) | Nie | Tak | ||
Schowki indeksów | Tak | N/A | Tak | Nie | Tak | ||
Ziarnistość blokowania | Tabela | Row | Row | Row | Row | ||
MVCC | No | Nie | Tak | Nie | Nie | ||
Obsługa replikacji (uwaga 1) | Tak | Ograniczona (uwaga 9) | Tak | Tak | Tak | Tak | Tak |
Limity pamięci masowej | 256TB | RAM | 64TB | Nie | 384EB | ||
T- | Tak | ||||||
Update statistics for data dictionary | Tak | Tak | Tak | Tak |
Notatki:
1. Zaimplementowane w serwerze, a nie w silniku pamięci masowej.
2. Skompresowane tabele MyISAM są obsługiwane tylko w przypadku korzystania z formatu skompresowanych wierszy. Tabele wykorzystujące format skompresowanych wierszy z MyISAM są tylko do odczytu.
3. Zaimplementowane w serwerze za pomocą funkcji szyfrowania.
4. Zaimplementowane w serwerze za pomocą funkcji szyfrowania; W MySQL 5.7 i nowszych obsługiwane jest szyfrowanie danych w stanie spoczynku.
5. Obsługa kluczy obcych jest dostępna w wersji MySQL Cluster NDB 7.3 i nowszych.
6. Obsługa indeksów FULLTEXT jest dostępna w wersji MySQL 5.6 i nowszych.
7. Obsługa indeksowania geoprzestrzennego jest dostępna w wersji MySQL 5.7 i nowszych.
8. InnoDB wykorzystuje indeksy haszowe wewnętrznie w funkcji Adaptive Hash Index.
9. Zobacz omówienie w dalszej części tego rozdziału.