sql >> Databáze >  >> RDS >> Mysql

Práce s MyISAM v MySQL

MyISAM je jedním z nejpopulárnějších úložišť v MySQL. MyISAM je často druhou volbou po InnoDB – v tomto příspěvku na blogu se pokusíme zjistit, jak nejlépe s tímto enginem pracovat.

Co je MyISAM?

MyISAM je jedním z úložišť MySQL. MyISAM je založen na ISAM (Indexed Sequential Access Method), indexačním algoritmu vyvinutém společností IBM, který umožňuje rychlé získávání informací z velkých sad dat. Při současném čtení z jedné tabulky a zápisu do ní se mu ale příliš nedaří, a to kvůli jeho uzamčení tabulky. Také nepodporuje transakce.

Pro některé inženýry MySQL je tento engine nejoblíbenější volbou po InnoDB:úložný modul MyISAM byl jediným úložným modulem poskytovaným MySQL v roce 2005 a byl k dispozici k použití více než 20 let. MyISAM byl výchozím úložištěm pro MySQL až do verze 5.5.

MyISAM zevnitř

Ukázka toho, jak MyISAM funguje zevnitř, není součástí tohoto blogu, ale můžeme vám poskytnout nastavení, která vám pomohou optimalizovat výkon motoru:

  • Myisam_sort_buffer_size definuje vyrovnávací paměť, která je alokována při řazení indexu pomocí dotazů REPAIR, CREATE INDEX nebo ALTER TABLE.
  • Key_buffer_size definuje velikost vyrovnávací paměti používané pro indexové bloky napříč tabulkami MyISAM. Zvýšení tohoto parametru může vést k lepšímu zpracování indexu.
  • Sort_buffer_size popisuje velikost vyrovnávací paměti, která je přidělena vláknům, která potřebují provádět operace řazení.
  • Read_buffer_size popisuje velikost vyrovnávací paměti, která je přidělena vláknům provádějícím operace sekvenčního skenování.
  • Write_buffer_size popisuje velikost vyrovnávací paměti pro zápis.

Tyto čtyři parametry jsou důležité, ale i když jsou důležité, měli byste také dávat pozor na proměnnou key_buffer_size. Proměnná key_buffer_size určuje velikost indexových vyrovnávacích pamětí uložených v paměti – představte si ji jako protějšek innodb_buffer_pool_size, ale pro MyISAM. Pokud se vaše servery skládají primárně z tabulek MyISAM, můžete proměnnou key_buffer_size přidělit přibližně 25 % nebo více dostupné paměti RAM na serveru. Existuje také další způsob, jak určit, jaká by měla být hodnota parametru key_buffer_size – jednoduše porovnejte hodnotu key_read_requests (celková hodnota požadavků na čtení indexu) a hodnotu key_reads (hodnota key_reads je počet požadavků, které musely být číst z disku). Hodnoty těchto parametrů lze získat pohledem na stavové proměnné serveru (stačí zadat dotaz SHOW GLOBAL STATUS na vašem serveru MySQL). Je také užitečné mít na paměti, že pokud key_reads vrací velkou hodnotu, hodnota key_buffer_size je pravděpodobně příliš malá.

MyISAM a MySQL 8.0

Pokud se zeptáte některých techniků MySQL, řeknou, že MyISAM by se již neměl používat. Proč? Někteří lidé to říkají proto, že protože když MySQL pokročilo, přidali většinu funkcí, které dříve bylo možné vidět pouze v MyISAM, do InnoDB, čímž se MyISAM účinně vykresluje:

  • Plnotextové indexy jsou v InnoDB dostupné od verze 5.6.
  • Přenosné tabulkové prostory jsou v InnoDB dostupné od verze 5.6.
  • Prostorové indexy jsou v InnoDB dostupné od verze 5.7.
  • Poslední aktualizace tabulky byla k dispozici v InnoDB od verze 5.7.

Měli byste tedy stále používat MyISAM? Asi ne. Je tu však jedno upozornění – mějte na paměti, že jednoduché COUNT(*) dotazy budou pravděpodobně fungovat rychleji na MyISAM než na InnoDB – MyISAM ukládá číslo do metadat tabulky, InnoDB nikoli.

Používám MyISAM a chci přejít na InnoDB, co mám dělat?

Pokud stále používáte MyISAM a chcete přejít na InnoDB, jednoduše převeďte všechny své tabulky na InnoDB. To se samozřejmě snáze řekne, než udělá, ale zde je jednoduchý návod:

  1. Zjistěte, které tabulky ve vaší instanci MySQL používají MyISAM:
    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘database_name’ AND ENGINE = ‘MyISAM’;
  2. Převeďte všechny své tabulky MyISAM do InnoDB:
    ALTER TABLE `table_name` ENGINE = InnoDB;

Pokud nechcete spouštět více příkazů ALTER TABLE jeden po druhém, zvažte umístění příkazů ALTER TABLE do cyklu. To je vše – máte hotovo!

Přehled

MyISAM je jedním z nejpopulárnějších motorů MySQL. Engine byl výchozí pro verze MySQL do 5.5. Engine je po InnoDB jednou z nejoblíbenějších možností, ale od MySQL 8.0 jej lze nazvat zastaralým – MySQL se již ujistilo, že vše, co lze dělat s MyISAM, lze také provádět, když se používá InnoDB, takže v tuto chvíli MyISAM je v podstatě užitečný pouze v případě, že chcete, aby jednoduché COUNT(*) dotazy byly rychlejší. Takové dotazy budou rychlejší, protože MyISAM ukládá číslo v metadatech tabulky – ostatní enginy MySQL ne.


  1. INSTR() Ekvivalent v SQL Server

  2. Udržování pořádku v dotazu MySQL IN

  3. Práce s daty v PostgreSQL

  4. Jak zálohovat databáze MySQL pomocí AutoMySQLBackup