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

    [MySql] query con inner join estremamente lenta

    Ciao a tutti, in una pagina php eseguo 4 query con delle inner join (un esempio sotto).
    La pagina ci mette più di un minuto a caricarsi! mentre senza le query ci impiega 20 secondi

    Codice PHP:
    $sql "SELECT a.AreeSostaId, a.nome, a.Comune, a.video, COUNT(v.id_as) as visite, p.Provincia, r.Regione FROM ".TABLE_AS." a "
                  
    ." INNER JOIN ".TABLE_REGIONI." r ON a.RegioneId = r.RegioniId "
                  
    ." INNER JOIN ".TABLE_PROVINCE." p ON a.ProvinciaId = p.Sigla "
                  
    ." INNER JOIN ".TABLE_VISITE." v ON a.AreeSostaId = v.id_as "
                  
    ." WHERE a.Enable = '1' "
                  
    ." GROUP BY a.AreeSostaId ORDER BY visite DESC LIMIT 10!; 
    Sapete dirmi come potrei migliorare? o se sbaglio qualcosa?


    Grazie mille!!!!!!!!

  2. #2
    hai messo gli indici nei posti giusti? quanti record ti riporta la query? che vuol dire "senza le query"?

  3. #3
    ciao, la query è giusta, e restituisce 10 record perchè c'è il limit.
    Senza query intendo caricare la pagina php commentando l'esecuzione di queste query, quindi solo immagini e testi statici, per intenderci.

  4. #4
    più di quaranta secondi per restituire 10 righe? sicuro che hai messo bene tutti gli indici sulle colonne interessate dalla query?

  5. #5
    Si, è corretta, altrimenti mi restituirebbe errore... per scrupolo lo messa direttamente in MySql (è qui che ho visto il tempo).
    Anche a me sembra molto strano.... fors eè colpa di qualcos'altro, ma non saprei :/

  6. #6
    Quote Originariamente inviata da danirota Visualizza il messaggio
    Si, è corretta, altrimenti mi restituirebbe errore... per scrupolo lo messa direttamente in MySql (è qui che ho visto il tempo).
    Anche a me sembra molto strano.... fors eè colpa di qualcos'altro, ma non saprei :/
    te lo chiedo per la terza volta, poi per me basta: hai messo gli indici? se non li metti mica ti dà errore, semplicemente va piano

  7. #7
    scusa.... su questo argomento credo di esser un pò carente. Credo che non ci siano, ho comunque fatto un'explain sulla query e questo è il risultato:


    id select_type table type possible_keys key key_len ref rows Extra
    1 SIMPLE p ALL NULL NULL NULL NULL 110 Using temporary; Using filesort
    1 SIMPLE a ALL NULL NULL NULL NULL 720 Using where
    1 SIMPLE r eq_ref PRIMARY PRIMARY 4 _db.a.RegioneId 1


    query
    SELECT a.AreeSostaId, a.nome, a.Comune, a.video, a.visite, p.Provincia, r.Regione
    FROM AreeSosta a
    INNER JOIN Regioni r ON a.RegioneId = r.RegioniId
    INNER JOIN Province p ON a.ProvinciaId = p.Sigla
    WHERE a.Enable = '1'
    GROUP BY a.AreeSostaId
    ORDER BY a.visite DESC
    LIMIT 10

  8. #8
    Ovviamnte ho le varire chiavi primarie, ma niente di più

  9. #9
    metti gli indici su tutte le colonne interessate dalle JOIN

    AreeSosta a
    INNER JOIN Regioni r ON a.RegioneId = r.RegioniId
    INNER JOIN Province p ON a.ProvinciaId = p.Sigla

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.