lunedì 27 dicembre 2010

MySQL: indici su tabelle

Tempo fa (molto tempo fa), avevo creato una tabella su database MySQL. Successivamente avevo ristrutturato la tabella, aggiungendo un campo, di seguito time_shoot.
mysql> alter table traffic add time_shoot bigint(11);
Query OK, 1138277 rows affected (0.99 sec)
Records: 1138277  Duplicates: 0  Warnings: 0
in cui si nota che i record erano 1.138.277.
Il campo creato doveva essere riempito con valori generati da uno script che io stesso avevo scritto. Eseguo lo script e, dopo alcuni minuti, genero la proiezione di termine di esecuzione: ~31 ore.

Mi e' sembrato eccessivo. Vado a vedere la struttura della tabella, e vedo che mancano gli indici.
Ok, inserisco alcuni indici e, d'improvviso, lo script accelera.
La proiezione si riduce a 3 min e 54 sec. La proiezione era corretta.

Il rapporto di miglioramento e' del 47692,3%.
Ecco, questa credo che sia stata la prima volta che MySQL mi abbia impressionato.

Morale: gli indici sulle tabelle sono molto importanti, soprattutto se le tabelle cresceranno... o non sapete se lo faranno

Nessun commento:

Posta un commento