Diventa autore di Elettronica News!



Inviaci un e-mail e inizia a collaborare con noi: elettronicanews@ymail.com

giovedì 26 febbraio 2009

MySQL tips and tricks: Velocizzare le Insert





In MySQL si possono utilizzare almeno tre modi per inserire i dati in tabella.


In questo articolo faremo un'analisi delle caratteristiche di ogni caso:

L'inserimento singolo

L'inserimento a gruppi

L'inserimento con LOAD DATA

Analizziamo i 3 modi per capire quale di questi è il più veloce per le nostre esigenze considerando che comunque ogni caso è sempre influenzato da:

  • dimensione record
  • quantità e dimensione degli indici
  • quantità dei record da inserire insieme
  • presenza di BIN, LOG-BIN

Inserimento singolo:

INSERT INTO tab (a,b,c) VALUES (1,2,3)

Caratteristiche:

  • Un comando per ogni riga da inserire
  • Il metodo più lento in assoluto!
  • Sintassi semplice
  • Si può ritardare usando la clausola delayed (insert delayed into)

Inserimento a gruppi:

INSERT INTO tab (a, b,c) VALUES (1,2,3),(4,5,6),(7,8,9)

Caratteristiche:

  • Un solo comando per ogni gruppo di record
  • Il metodo pià veloce (senza passare dalla riga di comando, quindi in genere dal DBA)
  • Sintassi più difficile
  • Dmensione massima della query limitata (in base alle impostazione di MySQL)

Inserimento con LOAD DATA:

LOAD DATA INFILE "pippo.txt" INTO TABLE tab

  • Una sola istruzione per tutta la tabella
  • Il metodo più veloce in assoluto!!
  • Il file contenente i dati deve essere sul server
  • Si può specificare il formato del record da usare (LINE TERMINATED/ENCLOSED BY)

Tutti e tre i metodi di inserimento possono essere più veloci ricorrendo all'indicizzazione ritardata, metodo con il quale, prima di iniziare a fare l'inserimento, si disabilitano gli indici e si riabilitano con l'inserimento avvenuto.

In questa maniera il DB ricrea tutte le chiavi in una sola operazione.

Es:

ALTER TABLE tab DISABLE KEYS;

Eseguo l'inserimento singolo, a gruppi o con LOAD DATA

ALTER TABLE tab ENABLE KEYS;

Concludendo ecco i risultati con l'inserimento di 100.000 record in una tabella con 3 indici:

  • Singolo: 22,5 sec, con indicizzazione ritardata: 17,6 sec.
  • A gruppi di 10.000: 6,9 sec, con ind. rit.: 2,7 sec
  • Con Load Data: 5,8 sec, con ind. rit.: 3,1 sec

Nessun commento:

Posta un commento