Úvod
Výběr správného úložiště je zásadním strategickým rozhodnutím, které ovlivňuje budoucí vývoj. V závislosti na vašem případu použití se rozhodněte mezi dvěma hlavními moduly úložiště pro MySQL – MyISAM nebo InnoDB .
V tomto článku se dozvíte hlavní rozdíly mezi úložnými moduly MyISAM a InnoDB, jak zkontrolovat, který úložný modul používáte, a jak jej převést.
Předpoklady
- Přístup k terminálu /příkazovému řádku
- Funkční databáze MySQL
- phpMyAdmin nainstalován
Co jsou MyISAM a InnoDB
MyISAM a InnoDB jsou úložiště MySQL. Úložné stroje jsou komponenty systému správy databází používané k manipulaci s daty v databázi.
MyISAM
MyISAM je zkratka pro Indexed Sequential Access Method. Do prosince 2009 to byl výchozí modul úložiště pro MySQL. S vydáním MySQL 5.5 byl MyISAM nahrazen InnoDB.
MyISAM je založen na algoritmu ISAM, který rychle zobrazuje informace z velkých souborů dat. Má malou datovou stopu a je nejvhodnější pro datové sklady a webové aplikace.
InnoDB
InnoDB je výchozím úložištěm pro MySQL od vydání MySQL 5.5. Nejlépe se hodí pro velké databáze, které obsahují relační data.
InnoDB se zaměřuje na vysokou spolehlivost a výkon, díky čemuž je skvělý pro systémy pro správu obsahu. Jedním z nejznámějších použití InnoDB je software MediaWiki, který pohání Wikipedii.
Hlavní rozdíly mezi MyISAM a InnoDB
Pojďme se podívat na hlavní rozdíly mezi MyISAM a InnoDB.
Funkce | MyISAM | InnoDB |
Typ | Netransakční | Transakční |
Zamykání | Zamykání stolu | Zamykání na úrovni řádků |
Cizí klíče | Ne | Ano |
Ukládání tabulek, indexů a dat | Tři samostatné soubory (.frm, .myd a .myi) | Tabulkový prostor |
Navrženo pro | Rychlost | Výkon |
KYSELINA | Ne | Ano |
Typ úložiště
V závislosti na metodě vrácení zpět existují dva typy úložišť:
- Netransakční – možnosti zápisu je třeba vrátit zpět ručně.
- Transakční – Pokud se možnosti zápisu nedokončí, automaticky se vrátí zpět.
Shrnutí: MyISAM je netransakční, zatímco InnoDB je transakční typ úložiště.
Zamykání
Uzamčení v MySQL je možnost, která zabraňuje dvěma nebo více uživatelům upravovat data současně. Když je aktivována možnost zamykání, uživatel nemůže měnit data. Tato funkce zachovává platnost všech dat.
MyISAM používá uzamykání tabulky jako výchozí způsob zamykání. Umožňuje jediné relaci upravovat tabulky najednou. Stoly jsou vždy uzamčeny ve stejném pořadí. Metoda zamykání tabulky je nejvhodnější pro databáze pouze pro čtení, které nevyžadují mnoho paměti.
Příklad uzamčení tabulky:
Dotazy | Sloupec 1 | Sloupec 2 | Sloupec 3 |
Dotaz 1 (aktualizace) | Psaní | Data | Data |
Dotaz 2 (čekejte) | Data | Data | Data |
Dotaz 3 (čekejte) | Data | Data | Data |
InnoDB používá uzamykání na úrovni řádků jako výchozí způsob zamykání. Podporuje více relací na vybraných řádcích tím, že pouze zamyká řádky v procesu úpravy. Zamykání řádků je nejvhodnější pro databáze, které mají více uživatelů. Nevýhodou je, že vyžaduje hodně paměti a zabere více času dotazování a úpravy dat.
Příklad zamykání na úrovni řádku:
Dotazy | Sloupec 1 | Sloupec 2 | Sloupec 3 |
Dotaz 1 (aktualizace) | Psaní | Data | Data |
Dotaz 2 (vyberte) | Čtení | Data | Čtení |
Dotaz 3 (aktualizace) | Data | Psaní | Data |
Shrnutí: MyISAM používá zamykání tabulky, zatímco InnoDB používá jako výchozí metodu zamykání na úrovni řádků.
Zahraniční klíče
Cizí klíč je sloupec (nebo kolekce sloupců) v jedné tabulce, který se propojuje se sloupcem (nebo kolekcí sloupců) v jiné tabulce. Zabraňuje akcím, které ničí propojení mezi tabulkami a možnosti vkládání neplatných dat.
Shrnutí: MyISAM nepodporuje možnost cizího klíče, zatímco InnoDB ano.
Tabulka, index a úložiště dat
Tyto dva moduly úložiště se liší podle toho, jak ukládají soubory.
MyISAM ukládá tabulky, index a data do tří samostatných souborů:
- .frm – Formát tabulky obsahující strukturu tabulky nebo definici tabulky.
- .myi – Indexový soubor s indexy pro každou tabulku.
- .myd – Datový soubor, který obsahuje data každé tabulky.
InnoDB ukládá strukturu tabulky do .frm a má tabulkový prostor kde ukládá indexy a data.
Shrnutí: MyISAM ukládá data do tří samostatných souborů, zatímco InnoDB ukládá data do jednoho souboru.
Podpora ACID
KYSELINA odkazuje na vlastnosti databázových transakcí:atomicita , konzistence , izolace a trvanlivost . Zaručuje dokončení transakce v případě chyby nebo selhání systému.
Další informace o modelech databázových transakcí naleznete v našem článku ACID vs. Base.
Shrnutí: MyISAM nepodporuje ACID, zatímco InnoDB plně vyhovuje ACID.
Jak zkontrolovat, zda používáte MyISAM nebo InnoDB
Pro manipulaci s daty je nezbytné použití správného úložiště. Nesprávný modul úložiště může vést k chybám v dotazování a snížení rychlosti a výkonu. Proto je zásadní zkontrolovat, zda jsou MyISAM nebo InnoDB nastaveny jako výchozí úložiště.
Poznámka: Ladění výkonu MySQL vyžaduje vyhodnocení mnoha faktorů. Pro nejlepší výkon doporučujeme používat InnoDB místo MyISAM.
Zkontrolujte pomocí příkazového řádku
Vyhledejte informace o výchozím modulu úložiště podle níže uvedených kroků.
1. Otevřete terminál a přihlaste se do prostředí MySQL. Poté zobrazte seznam databází:
SHOW DATABASES;
2. Najděte preferovanou databázi ze seznamu a vyberte ji:
USE database_name;
Terminál zobrazí potvrzovací zprávu o změně databáze.
3. Dále použijte SHOW CREATE TABLE
příkaz pro zobrazení informací o tabulce a úložišti:
SHOW CREATE TABLE database_name.table_name;
V níže uvedeném příkladu výstup uvádí InnoDB jako výchozí úložiště.
Poznámka: Nahraďte database_name
a table_name
s názvem vaší databáze a tabulky.
Zkontrolujte pomocí phpMyAdmin
Existují dva způsoby, jak zkontrolovat výchozí úložiště v phpMyAdmin:
- Ze seznamu tabulek.
- Spuštěním dotazu.
Ze seznamu tabulek
Pomocí seznamu tabulek můžete zjistit, které tabulky používají MyISAM nebo InnoDB jako výchozí úložiště.
1. Otevřete phpMyAdmin a vyberte preferovanou databázi ze seznamu.
2. V Seznamu tabulek , vyhledejte Typ ve sloupci zobrazíte typy úložných strojů. V našem příkladu Zákazníci tabulka používá MyISAM jako výchozí úložiště.
Spuštění dotazu
Dalším způsobem, jak zobrazit výchozí modul úložiště, je spustit dotaz.
1. Přihlaste se do phpMyAdmin a vyberte preferovanou databázi ze seznamu databází.
2. Vyberte SQL pro přístup k možnostem dotazu.
3. Zadáním následujícího příkazu zobrazíte všechny tabulky používající MyISAM jako úložiště:
SELECT TABLE_NAME, ENGINE FROM information_schema. TABLES WHERE TABLE_SCHEMA = 'database_name' and ENGINE = 'myISAM'
4. Klikněte na Přejít spustit dotaz.
Poznámka: Nahraďte database_name
s názvem vaší databáze.
Výstup zobrazí seznam všech tabulek obsahujících úložiště MyISAM.
Stejný příkaz můžete použít k vyhledání databází pomocí úložiště InnoDB. Upravte dotaz nahrazením ENGINE = 'myISAM'
s ENGINE = 'InnoDB'
.
Jak převést MyISAM a InnoDB
Problémy mohou nastat, pokud používáte InnoDB v každodenních procesech, zatímco starší tabulka používá MyISAM. Proto je nezbytné vědět, jak převádět tabulky.
Převést Storage Engine přes terminál
Spusťte ALTER TABLE
příkaz v prostředí MySQL pro převod úložiště z MyISAM na InnoDB a naopak.
- Chcete-li převést InnoDB na MyISAM, spusťte:
ALTER TABLE database_name.table_name ENGINE=MyISAM;
- Chcete-li převést MyISAM na InnoDB, spusťte:
ALTER TABLE database_name.table_name ENGINE=InnoDB;
Terminál vytiskne potvrzovací zprávu.
Převést Storage Engine pomocí phpMyAdmin
Existují dva způsoby, jak převést modul úložiště v phpMyAdmin:
- Pomocí Tabulkových operací menu.
- Spuštění dotazu.
Použití nabídky operací
1. Vyberte preferovanou databázi z nabídky databáze.
2. Vyberte tabulku, pro kterou chcete upravit modul úložiště, a vyberte Další rozevírací nabídky.
3. Klikněte na Operace pro přístup k nabídce.
4. Vyhledejte Storage Engine nastavení v tabulce možnosti a kliknutím na modul úložiště načtěte rozevírací nabídku obsahující různé moduly úložiště. Vyberte InnoDB ze seznamu a klikněte na PŘEJÍT pro uložení změny.
Spuštění dotazu
1. Otevřete SQL příkazové centrum pro preferovanou databázi.
2. Spusťte ALTER TABLE
příkaz v prostředí MySQL pro převod modulu úložiště.
Chcete-li převést na MyISAM, spusťte:
ALTER TABLE table_name ENGINE=MyISAM;
Chcete-li převést na InnoDB, spusťte:
ALTER TABLE.table_name ENGINE=InnoDB;
3. Klikněte na tlačítko PŘEJÍT tlačítko pro spuštění dotazu.
Úspěšně jste převedli modul úložiště.