Molte autoscuole d' italia interrogano il Db con questa query con ogni loro allievo, quindi a volte si saturano le risorse del DB
Molte autoscuole d' italia interrogano il Db con questa query con ogni loro allievo, quindi a volte si saturano le risorse del DB
a volte comunque a caricare i dati nella jquery datatable ci va anche 2 minuti interi
ok, rifo per la terza volta la domanda: hai controllato gli indici?
sìsì tutto indicizzato!!
ok. allora guarda se il server è ben carrozzato. e anche, se quella è la query più eseguita e più problematica, provare a pensare a una stored procedure
sì quella è una delle 2 più pesanti!
prova questa
ma non assicuro nullacodice:SELECT sync.id_allievo AS id_allievo, Count(sync.id_allievo) AS schede, li.domande AS domande, ifnull(li.errori, 0) AS errori, Ifnull(mediaerrori,0) AS mediaerrori FROM (SELECT * FROM sync WHERE sync._stato <> 'D' AND sync._stato <> 'X' AND sync.tipo = 'TipoEsame' sync.id_allievo = '. $id_allievo . ' ) sync LEFT JOIN allievo A ON a.id_allievo = sync.id_allievo LEFT JOIN clientescuola CS ON (cs.id_clientescuola = a.id_clientescuola AND cs.id_sedeclienteneca = '. $id_sedeClienteNeca . ') LEFT JOIN listato LI ON li.tipo = a.listatoquiz JOIN (SELECT Avg(media) AS mediaerrori FROM (SELECT errori AS media FROM sync WHERE id_allievo='. $id_allievo . ' AND tipo = 'TipoEsame' ORDER BY `sync`.`datafine` DESC limit 15) AS mediaerrori) MediaErrori
Sì funzionare funziona... M a performance sono uguali...temo che il problema sia proprio la tabella sync che è ingestibile!
prova con una SP passando per tabelle temporanee. con SQL Server le performance aumentano in maniera spaventosa (non so con MySQL )
per esempio
poi nella tua select usi TEMP al posto di sync, ma senza WHERE perché è già pulitacodice:SELECT * INTO TEMP FROM sync WHERE sync._stato <> 'D' AND sync._stato <> 'X' AND sync.tipo = 'TipoEsame' sync.id_allievo = '. $id_allievo . ' )
Scusa non sono così bravo di sql e non ho capito...come posso fare a trasformare quella query?