[Db] prestazioni mysql
Marcello Vezzelli
marcello a vezz.it
Mar 31 Lug 2007 10:54:20 CEST
Ciao a tutti,
ho una tabella fatta circa in questo modo...
CREATE TABLE `mov` (
`id` int(11) NOT NULL auto_increment,
`data` date NOT NULL,
`descr` varchar(100) collate latin1_general_ci default NULL,
`rif_cassa_src` int(11) NOT NULL default '0',
`rif_cassa_dst` int(11) NOT NULL default '0',
`importo` double NOT NULL default '0',
`rif_distinta` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `data` (`data`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
Questa tabella contiene movimenti tra 12 casse: l'importo viene spostato
dalla rif_cassa_src alla rif_cassa_dst.
Come si vede, c'è un indice sul campo 'data'.
Nel software di gestione che sto scrivendo, ho circa 90 movimenti di
questo tipo al giorno.
Siccome ho necessità di tener traccia del saldo di tutte e 12 le casse
con frequenti aggiornamenti, ricalcolando ogni volta i saldi, mi è
venuto il dubbio che a lungo andare la faccenda potesse diventare pesante...
Ho fatto allora una simulazione con 100.000 record (sono oltre 3 anni di
dati) e una query di questo tipo:
SELECT (
(SELECT SUM(importo) FROM mov WHERE rif_cassa_dst=1 AND data
<='2007-07-31') -
(SELECT SUM(importo) FROM mov WHERE rif_cassa_src=1 AND data
<='2007-07-31')
) as saldo;
Questa query viene eseguita in 0.12 secondi.
Sono rimasto positivamente colpito da questo risultato... me
l'aspettavo, ma è bello vedere che le cose funzionano bene!
Quando ho un po' di tempo, voglio fare qualche test aggiuntivo
aggiungendo un indice sui riferimenti di cassa, per vedere cosa cambia
(se cambia qualcosa).
Secondo voi c'è modo di ottenere performance ancora migliori con una
struttura simile?
Saluti
Marcello
Maggiori informazioni sulla lista
Db