Salve,
dal titolo si capisce poco, faccio un esempio che si capisce meglio.
facedo una query di questo tipo
mi viene fuori una tabella di questo tipo
[table="width: 500"]
[tr]
[td]id[/td]
[td]nome[/td]
[td]cognome[/td]
[td]città[/td]
[td]reddito[/td]
[td]id_aggiornamento[/td]
[/tr]
[tr]
[td]500[/td]
[td]Franco[/td]
[td]Bollo[/td]
[td]Milano[/td]
[td]500[/td]
[td]9[/td]
[/tr]
[tr]
[td]500[/td]
[td]Franco[/td]
[td]Bollo[/td]
[td]Milano[/td]
[td]480[/td]
[td]8[/td]
[/tr]
[tr]
[td]500[/td]
[td]Franco[/td]
[td]Bollo[/td]
[td]Milano[/td]
[td]550[/td]
[td]7[/td]
[/tr]
[tr]
[td]500[/td]
[td]Franco[/td]
[td]Bollo[/td]
[td]Milano[/td]
[td]490[/td]
[td]6[/td]
[/tr]
[/table]
Se invece volessi come ouput una tabella come questa?
[table="width: 500"]
[tr]
[td]id[/td]
[td]nome[/td]
[td]cognome[/td]
[td]città[/td]
[td]reddito_agg1[/td]
[td]reddito_agg2[/td]
[td]reddito_agg3[/td]
[td]reddito_agg4[/td]
[/tr]
[tr]
[td]500[/td]
[td]Franco[/td]
[td]Bollo[/td]
[td]Milano[/td]
[td]500[/td]
[td]480[/td]
[td]550[/td]
[td]490[/td]
[/tr]
[/table]
Premetto che questa è una subquery di una query mooolto pesante, ora come ora l'ho staccata dalla query principale.
La query principale mi da come risultato gli utenti con un determinato reddito compreso tra dei valori definiti dall'utente, il tempo di esecuzione è 0,8 secondi.
Il problema è che quando faccio il fetch dei risultati, per ogni utente mi esegue la query che ho postato all'inizio, quindi se ho 200 risultati fa questa query 200 volte, portando il tempo di esecuzione totale oltre i 15 secondi!
Quindi quello che vorrei fare è inglobarla come subquery della query principale, in modo da fare la join con le altre subquery. Mi spiego meglio con un po' di codice.
Questa è la query principale
Questa mi da in output esattamente i risultati che mi interessano, ma quando devo andare a stampare a video, devo dare un feedback della variazione di reddito per un utente nelle diverse città, per questo faccio poi la prima query (che in base ai risultati può essere ripetuta fino a 200-300 volte) che rallenta tutto.
E' bene accetta qualunque idea
dal titolo si capisce poco, faccio un esempio che si capisce meglio.
facedo una query di questo tipo
Codice:
select id, nome, cognome, città, reddito, id_aggiornamento from tabella where id = 500
[table="width: 500"]
[tr]
[td]id[/td]
[td]nome[/td]
[td]cognome[/td]
[td]città[/td]
[td]reddito[/td]
[td]id_aggiornamento[/td]
[/tr]
[tr]
[td]500[/td]
[td]Franco[/td]
[td]Bollo[/td]
[td]Milano[/td]
[td]500[/td]
[td]9[/td]
[/tr]
[tr]
[td]500[/td]
[td]Franco[/td]
[td]Bollo[/td]
[td]Milano[/td]
[td]480[/td]
[td]8[/td]
[/tr]
[tr]
[td]500[/td]
[td]Franco[/td]
[td]Bollo[/td]
[td]Milano[/td]
[td]550[/td]
[td]7[/td]
[/tr]
[tr]
[td]500[/td]
[td]Franco[/td]
[td]Bollo[/td]
[td]Milano[/td]
[td]490[/td]
[td]6[/td]
[/tr]
[/table]
Se invece volessi come ouput una tabella come questa?
[table="width: 500"]
[tr]
[td]id[/td]
[td]nome[/td]
[td]cognome[/td]
[td]città[/td]
[td]reddito_agg1[/td]
[td]reddito_agg2[/td]
[td]reddito_agg3[/td]
[td]reddito_agg4[/td]
[/tr]
[tr]
[td]500[/td]
[td]Franco[/td]
[td]Bollo[/td]
[td]Milano[/td]
[td]500[/td]
[td]480[/td]
[td]550[/td]
[td]490[/td]
[/tr]
[/table]
Premetto che questa è una subquery di una query mooolto pesante, ora come ora l'ho staccata dalla query principale.
La query principale mi da come risultato gli utenti con un determinato reddito compreso tra dei valori definiti dall'utente, il tempo di esecuzione è 0,8 secondi.
Il problema è che quando faccio il fetch dei risultati, per ogni utente mi esegue la query che ho postato all'inizio, quindi se ho 200 risultati fa questa query 200 volte, portando il tempo di esecuzione totale oltre i 15 secondi!
Quindi quello che vorrei fare è inglobarla come subquery della query principale, in modo da fare la join con le altre subquery. Mi spiego meglio con un po' di codice.
Questa è la query principale
Codice:
SELECT t1.*, t3.somma
FROM ( qui prendo tutte le città che mi interessano ) AS t1,
( qui prendo tutti gli id utente che stanno nelle città che mi interessano ) AS t2,
( questa è la più pesante, calcolo la somma di tutti i tipi di reddito di un utente anche in città diverse da quelle che mi interessano e ne controlla la variazione più applica eventuali filtri ) AS t3
WHERE t1.idUser = t2.idUser AND t2.idUser = t3.idUser
E' bene accetta qualunque idea