windows server 2012
MySql server 5.7
Buongiorno a tutti,
volevo chiedervi, per cortesia, se il modo di come è scritta questa query..è il modo migliore, insomma più efficiente e che dia il risultato nel minor tempo possibile.
Ho 2 tabelle :
clienti
movimenti
devo ottenere l'elenco dei clienti (anche di quelli che non hanno fatto nessun movimento) con il numero dei movimenti ed il totale (euro) sia parziale che totale, cioè se un cliente ha fatto 10 movimenti per un totale di 1000 euro e supponiamo che nel filtraggio rientrino solo 3 dei movimenti per un totale parziale di 700 euro, la query deve darmi sia i risultati parziali 3 e 700 che i totali ovvero 10 e 1000
questa è la query, e questa funziona ma volevo sapere, per cortesia, se è il modo più efficiente
SELECT clienti.codice,
clienti.nominativo,
COUNT(movimenti.progressivo) AS numParz,
SUM(ifnull(movimenti.importo,0)) AS totParz,
IFNULL(vt.NumMovTot,0),
IFNULL(vt.Totale,0)
FROM clienti
LEFT JOIN movimenti ON movimenti.CodiceCliente=clienti.Codice
LEFT JOIN
(
SELECT movimenti.CodiceCliente AS codiceCliente,
COUNT(movimenti.progressivo) AS numMovTot,
SUM(movimenti.importo) AS Totale
FROM movimenti
GROUP BY movimenti.codiceCliente
) vt
ON vt.CodiceCliente=clienti.Codice
where codnizioni varie
GROUP BY clienti.Codice
qui potete scaricare il database azienda per poter fare eventuali prove
https://www.dropbox.com/s/rlj92e9lvx...ienda.sql?dl=0
questo è il risultato di explain della query
https://www.dropbox.com/s/2bwo0qquae...query.png?dl=0
confido nel vs aiuto oper ottimizzare al meglio la query
Vi saluto