
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