Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL disabilita e abilita le chiavi

Devi assolutamente scegliere il tuo approccio in base al tipo di motore... ottimizzando per MyISAM o per InnoDB .

Di recente abbiamo eseguito un benchmark confrontando diversi modi per inserire i dati e misurato il tempo da prima dell'inserimento e fino al ripristino completo di tutti gli indici. Era su un tavolo vuoto, ma abbiamo utilizzato fino a 10 milioni di righe.

MyISAM con LOAD DATA INFILE e ALTER TABLE ... ENABLE/DISABLE KEYS vinto a mani basse nel nostro test (su un sistema Windows 7, MySQL 5.5.27 - ora lo stiamo provando su un sistema Linux).

ENABLE e DISABLE KEYS non funzionano per InnoDB, è solo MyISAM. Per InnoDB, usa SET AUTOCOMMIT = 0; SET FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0; se sei sicuro che i tuoi dati non contengano duplicati (non dimenticare di impostarli su 1 al termine del caricamento).

Non credo che tu abbia bisogno di OPTIMIZE TABLE dopo un inserimento in blocco - le righe MySQL vengono ordinate per inserimento e l'indice viene comunque ricostruito. Non c'è "frammentazione extra" eseguendo un inserimento collettivo.

Sentiti libero di commentare se ho commesso errori di fatto.

AGGIORNAMENTO: In base ai risultati dei nostri test più recenti e completi, il consiglio di DISABILITARE/ABILITARE i tasti è errato.

Un collega ha fatto eseguire a un programma più test diversi:una tabella con InnoDB / MyISAM precompilata e vuota, velocità di selezione e inserimento con LOAD DATA LOCAL , INSERT INTO , REPLACE INTO e UPDATE , su tabelle "dense" e "frammentate" (non sono sicuro di come, penso fosse sulla falsariga di DELETE FROM ... ORDER BY RAND() LIMIT ... con un seme fisso quindi è ancora confrontabile) e indici abilitati e disabilitati.

L'abbiamo testato con diverse versioni di MySQL (5.0.27, 5.0.96, 5.1.something, 5.5.27, 5.6.2) su Windows e Linux (non le stesse versioni su entrambi i sistemi operativi, però). MyISAM ha vinto solo quando il tavolo era vuoto. InnoDB era più veloce quando i dati erano già presenti e generalmente funzionava meglio (tranne che per lo spazio hdd - MyISAM è più piccolo su disco).

Tuttavia, per trarne davvero vantaggio, devi testarlo tu stesso - con versioni diverse, impostazioni di configurazione diverse e molta pazienza - soprattutto per quanto riguarda le strane incongruenze (5.0.97 era molto più veloce della 5.5.27 con la stessa configurazione - noi stai ancora cercando la causa). Quello che abbiamo trovato è stato quel DISABLE KEYS e ENABLE KEYS sono quasi inutili e talvolta dannosi se non inizi con un tavolo vuoto.