Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Ottimizare query join con più di 25.000 record

    Buongiorno a tutti,
    volevo sottoporre a pareri esperti un quesito riguardante l'ottimizzazione, se possibile, di una query di JOIN tra più tabelle.
    Ottimizzazione perché le tabelle interessate hanno tra i 20.000 e i 30.000 records.

    Attualmente tutto mi funziona e viene eseguito, solamente che il tempo medio di esecuzione della query è di 20 minuti.
    Posto subito la query così vado al sodo:

    SELECT
    prodottidatigen.codprod,prodottidatigen.descrizion e,prodottidatigen.prz,prodottidatigen.iva,,prodott idatigen.um,
    jgs.Trattanti,jgs.qtatrattate,jgs.euro,
    prodottidatiean.ean,
    prodottidatigiacenze.giac_fisica,
    prodottifornitore.codprodfornit,prodottifornitore. codfornit,prodottifornitore.nomefornit,
    prodottipackage.pzct,
    prodottidatiprezzi01.datadecor01,prodottidatiprezz i01.przAcq01,
    prodottidatiprezzi10.datadecor10,prodottidatiprezz i10.przAcq10
    prodottidatiprezzizero.datadecorzero,prodottidatip rezzizero.przAcqzero,
    prodottiOper.NomeOperatore
    FROM prodottidatigen
    LEFT JOIN jgs USING (codprod)
    LEFT JOIN prodottidatiean USING (codprod)
    LEFT JOIN prodottidatigiacenze USING (codprod)
    LEFT JOIN prodottipackage USING (codprod)
    LEFT JOIN prodottifornitore USING (codprod)
    LEFT JOIN prodottidatiprezzi01 USING (codprod)
    LEFT JOIN prodottidatiprezzi10 USING (codprod)
    LEFT JOIN prodottidatiprezzizero USING (codprod)
    LEFT OUTER JOIN prodottiOper
    ON prodottifornitore.operat = prodottiOper.codOper

    Dunque, ci sono 10 tabelle ognuna contenente vari dati/campi differenti di articoli di vendita, che sono circa 25.000
    Tutte le tabelle hanno in comune il codiceProdotto, che viene usato come campo di unione. Solo l'ultima tabella non usa il codceProdotto come campo di unione ma ne usa uno differente.
    Effettuo questa query e riesco a recuperare tutti i dati che mi servono, relazionati correttamente.
    Tutto funzionante, ma il tempo di esecuzione è proprio un po' lungo, dovuto immagino al fatto che i records coinvolti siano così grandi.
    I dati ottenuti da questa query li uso poi per inserirli una tabella "finale" di consultazione, tramite:
    INSERT INTO tabFinale (codProd, ..., ..., )
    SELECT ==> query con join indicata sopra

    Se esiste la possibilità di ottimizzare il tempo di esecuzione della query,
    magari usando un altro metodo al posto delle Join, sono ben disponibile a testarlo.

    Grazie a chiunque possa darmi un suggerimento.

  2. #2
    la strada da intraprendere dipende anche dal db che usi: per questo motivo il regolamento (questo sconosciuto ) chiede di specificarlo già nel titolo

  3. #3
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,584
    20 minuti è troppo per chiunque
    fossi in te vedrei che DB si tratta
    se puoi togliere tabelle
    se puoi togliere colonne
    se puoi aggiungere chiavi
    se puoi aggiungere indici
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Scommetto che se aggiungi un indice su codprod a tutte le tabelle i tempi precipitano...

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    231
    scusa l'intromissione, ovviamente è per aiutare l'utente, come funziona il LEFT JOIN USING rispetto al left join tradizionale?
    Se la risposta ti è stata in qualche modo di aiuto o ti va di supportarmi metti "mi piace" alla pagina a questo link

    https://www.facebook.com/blogprogrammatori

    Non ti costa nulla!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.