Určitě si musíte vybrat svůj přístup na základě typu motoru... optimalizace pro MyISAM nebo pro InnoDB .
Nedávno jsme provedli benchmark, který porovnával různé způsoby vkládání dat a měřil čas před vložením až do úplného obnovení všech indexů. Bylo to na prázdném stole, ale použili jsme až 10 milionů řádků.
MyISAM s LOAD DATA INFILE
a ALTER TABLE ... ENABLE/DISABLE KEYS
zvítězil v našem testu (na systému Windows 7, MySQL 5.5.27 – nyní to zkoušíme na systému Linux).
ENABLE a DISABLE KEYS nefunguje pro InnoDB, je to pouze MyISAM. Pro InnoDB použijte SET AUTOCOMMIT = 0; SET FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0;
pokud jste si jisti, že vaše data neobsahují duplikáty (nezapomeňte je nastavit na 1
po dokončení nahrávání).
Nemyslím si, že potřebujete OPTIMIZE TABLE
po hromadném vložení - Řádky MySQL jsou seřazeny vložením a index se stejně přestaví. Hromadným vkládáním nedochází k žádné „další fragmentaci“.
Neváhejte se vyjádřit, pokud jsem udělal faktické chyby.
AKTUALIZACE: Podle našich novějších a úplných výsledků testů je rada pro klávesy DISABLE / ENABLE nesprávná.
Spolupracovník nechal program spustit několik různých testů – tabulku s předvyplněnou a prázdnou InnoDB / MyISAM, rychlost výběru a vkládání pomocí LOAD DATA LOCAL
, INSERT INTO
, REPLACE INTO
a UPDATE
, na "husté" a "fragmentované" tabulky (nejsem si úplně jistý jak, myslím, že to bylo ve smyslu DELETE FROM ... ORDER BY RAND() LIMIT ...
s pevným výchozím bodem, takže je stále srovnatelný) a povolenými a deaktivovanými indexy.
Testovali jsme to s mnoha různými verzemi MySQL (5.0.27, 5.0.96, 5.1.something, 5.5.27, 5.6.2) na Windows a Linux (ne však stejné verze na obou OS). MyISAM vyhrál pouze tehdy, když byl stůl prázdný. InnoDB byl rychlejší, když už byla k dispozici data, a obecně fungoval lépe (kromě hdd-space – MyISAM je na disku menší).
Přesto, abyste z toho měli skutečný užitek, musíte si to sami otestovat – s různými verzemi, různými nastaveními konfigurace a velkou trpělivostí – zejména s ohledem na podivné nekonzistence (5.0.97 bylo mnohem rychlejší než 5.5.27 se stejnou konfigurací – my stále hledám příčinu). To, co jsme našli, bylo že DISABLE KEYS
a ENABLE KEYS
jsou téměř bezcenné a někdy škodlivé, pokud nezačnete s prázdnou tabulkou.