• User

    [SQL] Lentezza caricamento recordset

    Buongiorno.
    Appena iscritta e subito a chiedervi un consiglio.
    Ho un problema. Devo visualizzare a video un recordset.
    La query è abbastanza complessa.
    Ora c'è un recordset dentro un altro recordeset...rallentando tutto in modo esagerato. ma purtroppo fino ad ora non sono riuscita a trovare una soluzione con una query unica.
    allora la prima query fa un raggruppamento. il problema è che ogni record deve soddisfare la condizione della seconda query.
    Sono riuscita a unire le due query ma così facendo mi perdo il raggruppamento!

    1° QUERY
    SELECT <CAMPI>
    *FROM ((TB1 INNER JOIN TB2 ON TB1.A = TB2.A) *
    *INNER JOIN *
    *TB3 ON *
    *TB2.B = TB3.B) INNER JOIN *
    *TB4 ON *
    *TB1.C = TB4.C WHERE *
    *<CONDIZIONI> *
    GROUP BY <CAMPI GRUPBY> ORDER BY ...

    2° QUERY
    *SELECT * FROM *

    *(SELECT * FROM *
    *TB1 LEFT JOIN TRIBUTI ON *
    *TB1.A=TB2.A WHERE *
    *TB1.B=<VARIABILE DELLA PRIMA QUERY>) AS Q1 *

    *LEFT JOIN *

    *(SELECT * FROM *
    *TB1 LEFT JOIN TB2 ON *
    *TB1.A = TB2.A WHERE *
    *<CONDIZIONI>) AS Q2 *

    Avete qualche suggerimento?
    Grazie in anticipo del vostro aiuto. 😉


  • User Attivo

    Prima di entrare nel merito della query, dovresti fornire maggiori elementi sulle tabelle..chiavi, indici etc.

    Di solito le query poco performanti derivano da scarso design delle tabelle.


  • User

    Ehm...il problema è che il db non l'ho creato io.
    Mi è stato chiesto solo di gestire l'interfaccia web.
    Cmq ha solo un campo chiave per ogni tabella.
    (tra l'altro di testo :x; è un progressivo)


  • User Attivo

    @SSWeb said:

    Ehm...il problema è che il db non l'ho creato io.
    Mi è stato chiesto solo di gestire l'interfaccia web.
    Cmq ha solo un campo chiave per ogni tabella.
    (tra l'altro di testo :x; è un progressivo)

    Potresti iniziare ad informarti su questi punti:

    1. con che frequenza vengono effettuate operazioni DML sui dati (insert, update, delete)
    2. se puoi aggiungere indici su colonne

    Se la 1) è POCO O NULLA e la 2) è SI allora vediamo di ottimizzare tutto 😉 , viceversa c'è poco da fare...


  • User

    se usi SQLServer adopera l'analizzatore di query per vedere se realmete è lenta l'esecuzione (ma se mancano gli indici direi di si).

    Se dal QueryAnalyzer ti risulta una velocità decente controlla le connessioni, (prediligi le native o OleDb), cerca di renderizzare pochi dati x volta sulla pagina etc etc

    Ciao:ciauz: