• User Newbie

    Consigli per ottimizzazione query su mysql

    Buongiorno, ho eseguito la migrazione da un db access verso mysql, il db viene utilizzato da un sito in classic asp.
    Ho migrato le tabelle con le medesime chiavi e indici.
    Ora noto che alcune query vengono eseguite 3 o 4 volte più lentamente.
    Vorrei un parere su questa query specifica che avevo creato con l'editor visuale di access, forse per mysql non è scritta nel modo migliore.

    select * from ((((ordini left join ordini_fatture on ordini.idord = ordini_fatture.idord) left join ddt on ordini.idord = ddt.idord) left join fatture on ordini_fatture.idfat = fatture.idfat) inner join utenti on ordini.iduser = utenti.iduser) left join (select incassi.idord, sum(incassi.importo) as sommadiimporto from incassi group by incassi.idord ) as sommadiincassi on ordini.idord = sommadiincassi.idord where ordini.eliminato=false and year(ordini.data)>=2015 order by ordini.idord desc

    Il funzionamento è questo: ho una tabella ordini e una tabella incassi, estraggo la somma degli incassi per ogni ordine e poi allego altri dati da tabelle collegate, ho tolto l'elenco dei campi che visualizzo per semplificare la lettura.
    Prendendo i dati dal db access la pagina veniva generata in 0.5 secondi, prendendo i dati da mysql la pagina viene generata in 1.5 secondi, ho gli stessi tempi eseguendo la query da phpmyadmin.

    Questo è l'explain:

    [TABLE="class: data ajax"]

    id[/TH]
    select_type[/TH]
    table[/TH]
    type[/TH]
    possible_keys[/TH]
    key[/TH]
    key_len[/TH]
    ref[/TH]
    rows[/TH]
    Extra[/TH]
    [/TR]
    [TR="class: odd"]
    [TD="class: inline_edit not_null nowrap, align: right"]1[/TD]
    [TD="class: inline_edit not_null"]PRIMARY[/TD]
    [TD="class: inline_edit"]ordini[/TD]
    [TD="class: inline_edit"]ALL[/TD]
    [TD="class: inline_edit"]iduser[/TD]
    [TD="class: inline_edit null, align: right"]NULL[/TD]
    [TD="class: inline_edit null, align: right"]NULL[/TD]
    [TD="class: inline_edit null, align: right"]NULL[/TD]
    [TD="class: inline_edit nowrap, align: right"]11315[/TD]
    [TD="class: inline_edit not_null"]Using where; Using temporary; Using filesort[/TD]
    [/TR]
    [TR="class: even"]
    [TD="class: inline_edit not_null nowrap, align: right"]1[/TD]
    [TD="class: inline_edit not_null"]PRIMARY[/TD]
    [TD="class: inline_edit"]ordini_fatture[/TD]
    [TD="class: inline_edit"]ref[/TD]
    [TD="class: inline_edit"]idord[/TD]
    [TD="class: inline_edit"]idord[/TD]
    [TD="class: inline_edit"]5[/TD]
    [TD="class: inline_edit"]Sql886196_1.ordini.idord[/TD]
    [TD="class: inline_edit nowrap, align: right"]11[/TD]
    [TD="class: inline_edit not_null nowrap"][/TD]
    [/TR]
    [TR="class: odd"]
    [TD="class: inline_edit not_null nowrap, align: right"]1[/TD]
    [TD="class: inline_edit not_null"]PRIMARY[/TD]
    [TD="class: inline_edit"]ddt[/TD]
    [TD="class: inline_edit"]ref[/TD]
    [TD="class: inline_edit"]idord[/TD]
    [TD="class: inline_edit"]idord[/TD]
    [TD="class: inline_edit"]5[/TD]
    [TD="class: inline_edit"]Sql886196_1.ordini.idord[/TD]
    [TD="class: inline_edit nowrap, align: right"]11[/TD]
    [TD="class: inline_edit not_null nowrap"][/TD]
    [/TR]
    [TR="class: even"]
    [TD="class: inline_edit not_null nowrap, align: right"]1[/TD]
    [TD="class: inline_edit not_null"]PRIMARY[/TD]
    [TD="class: inline_edit"]fatture[/TD]
    [TD="class: inline_edit"]eq_ref[/TD]
    [TD="class: inline_edit"]PRIMARY,IDfat[/TD]
    [TD="class: inline_edit"]PRIMARY[/TD]
    [TD="class: inline_edit"]4[/TD]
    [TD="class: inline_edit"]Sql886196_1.ordini_fatture.idfat[/TD]
    [TD="class: inline_edit nowrap, align: right"]1[/TD]
    [TD="class: inline_edit not_null nowrap"][/TD]
    [/TR]
    [TR="class: odd"]
    [TD="class: inline_edit not_null nowrap, align: right"]1[/TD]
    [TD="class: inline_edit not_null"]PRIMARY[/TD]
    [TD="class: inline_edit"]utenti[/TD]
    [TD="class: inline_edit"]eq_ref[/TD]
    [TD="class: inline_edit"]PRIMARY[/TD]
    [TD="class: inline_edit"]PRIMARY[/TD]
    [TD="class: inline_edit"]4[/TD]
    [TD="class: inline_edit"]Sql886196_1.ordini.iduser[/TD]
    [TD="class: inline_edit nowrap, align: right"]1[/TD]
    [TD="class: inline_edit not_null nowrap"][/TD]
    [/TR]
    [TR="class: even"]
    [TD="class: inline_edit not_null nowrap, align: right"]1[/TD]
    [TD="class: inline_edit not_null"]PRIMARY[/TD]
    [TD="class: inline_edit"]<derived2>[/TD]
    [TD="class: inline_edit"]ALL[/TD]
    [TD="class: inline_edit null, align: right"]NULL[/TD]
    [TD="class: inline_edit null, align: right"]NULL[/TD]
    [TD="class: inline_edit null, align: right"]NULL[/TD]
    [TD="class: inline_edit null, align: right"]NULL[/TD]
    [TD="class: inline_edit nowrap, align: right"]10058[/TD]
    [TD="class: inline_edit not_null nowrap"][/TD]
    [/TR]
    [TR="class: odd hover"]
    [TD="class: inline_edit not_null nowrap, align: right"]2[/TD]
    [TD="class: inline_edit not_null"]DERIVED[/TD]
    [TD="class: inline_edit"]incassi[/TD]
    [TD="class: inline_edit"]ALL[/TD]
    [TD="class: inline_edit null, align: right"]NULL[/TD]
    [TD="class: inline_edit null, align: right"]NULL[/TD]
    [TD="class: inline_edit null, align: right"]NULL[/TD]
    [TD="class: inline_edit null, align: right"]NULL[/TD]
    [TD="class: inline_edit nowrap, align: right"]12423[/TD]
    [TD="class: inline_edit not_null"]Using temporary; Using filesort[/TD]
    [/TR]
    [/TABLE]

    Ho provato a forzare l'indice idord sulla tabella incassi ma senza benefici in termini di performance.
    Grazie per l'aiuto.

    Andrea