Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481

    [MySQL] come ottmizzare query da 10 secondi!

    Questa query ci mette 10 secondi ad essere eseguita:

    codice:
    SELECT prodotti.id, COUNT( prodotti.id ) AS n, prodotti.campo1......20
    FROM prodotti
    JOIN tab2 ON ...
    JOIN tab3 ON ...
    LEFT JOIN tab4 ON ...
    JOIN tab5 ON ...
    JOIN tab6 ON ...
    GROUP BY prodotti.id
    ORDER BY n DESC
    LIMIT 0 , 6;
    la tabella prodotti ha 2500
    tab2 2500
    tab3 170
    tab4 1500
    tab5 2500
    tab6 135.000

    C'è un modo per migliorare questa query? 10 secondi sono improponibili! D'altra parte i record sono quelli, non è che posso eliminarli. Più che altro quello che crea lentezza è l'ultima Join con tab6 che ha 135.000, quanto tab6 aveva poche centinaia di record tutto era ok, ma ora che ne ha così tanti....è lentissimo!

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    133
    l'unico consiglio che mi viene di darti è di ordinare le tabelle nella join in ordine di numero di tuple: prima fai la join tra le 2 tabelle più piccole, poi con la terza tabella più piccola, e così via fino all'ultima con 135000 tuple... in questo modo dovresti, dico dovresti, guadagnare qualcosina... almeno questo è ciò che ci hanno insegnato al corso di ingeneria del software...

  3. #3
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    gli indici sono definiti? le tabelle cosa contengono?
    think simple think ringo

  4. #4
    anche io ti consiglio di definire tutti gli indici sugli id esterni e non di tutte le tabelle interessate.

    in particolare se hai

    tab1 JOIN tab2 ON tab1.id=tab2.id_tab1

    devi definire gli indici su
    tab1.id
    tab2.id_tab1
    Michele Castellucci
    Sviluppatore Web del Consorzio CottonBit
    Consorzio Cottonbit
    Risorse per la programmazione
    Dire Fare Programmare!

  5. #5
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    Originariamente inviato da ghiaccio84
    anche io ti consiglio di definire tutti gli indici sugli id esterni e non di tutte le tabelle interessate.

    in particolare se hai

    tab1 JOIN tab2 ON tab1.camo_id=tab2.id_tab1

    devi definire gli indici su
    tab1.id
    tab2.id_tab1
    mi sono perso! cosa intendi x definire un indice? io faccio come nel tuo esempio tab1 JOIN tab2 ON tab1.camo_id=tab2.id_tab1, è sufficente questo? Anche xke se non facessi così come faccio a definire gli indici?

  6. #6
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    Originariamente inviato da tasso85
    l'unico consiglio che mi viene di darti è di ordinare le tabelle nella join in ordine di numero di tuple: prima fai la join tra le 2 tabelle più piccole, poi con la terza tabella più piccola, e così via fino all'ultima con 135000 tuple... in questo modo dovresti, dico dovresti, guadagnare qualcosina... almeno questo è ciò che ci hanno insegnato al corso di ingeneria del software...
    non lo sapevo, grazie, cmq la tabella con 135.000 record è l'ultima nella lista delle join, quindi sto già usando, per un puro caso, l'ordinamento migliore

  7. #7
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    Originariamente inviato da marketto
    gli indici sono definiti? le tabelle cosa contengono?
    a parte la tab4 da 1.500 record che contiene cambi blob, le altre contengono tutti campi int e varchar

  8. #8
    Originariamente inviato da james
    mi sono perso! cosa intendi x definire un indice? io faccio come nel tuo esempio tab1 JOIN tab2 ON tab1.camo_id=tab2.id_tab1, è sufficente questo? Anche xke se non facessi così come faccio a definire gli indici?
    leggi che fai prima

    http://database.html.it/guide/lezione/2447/indici/

    metti gli indici e una clausola where la query ci mette tanto perchè è come se fosse fatta su una tabella con milioni di record

  9. #9
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    Originariamente inviato da danielinux
    leggi che fai prima

    http://database.html.it/guide/lezione/2447/indici/

    metti gli indici e una clausola where la query ci mette tanto perchè è come se fosse fatta su una tabella con milioni di record
    ho creato i due indici,che where ci metto? non ne ho bisogno, con i soli indici non ho risultati significativi

  10. #10

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 © 2025 vBulletin Solutions, Inc. All rights reserved.