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

    Come ottimizzare il mio sito PHP? Troppe query...

    Ciao ragazzi oggi chiedo un piccolo aiuto perché ho sempre programmato in maniera "impulsiva" ed ho poco pensato a studiare metodi avanzati di caching etc...

    Il mio sito è un vero e proprio CRM, ovvero un sistema dove degli "clienti" aprono dei ticket che poi i vari operatori gestiscono...

    La pagina più pesante è quella principale, la visualizza_ticket.php che mostra agli operatori tutti i ticket aperti, in lavorazione, da assegnare etc... Anche se ne sono un centinaio sono "pesanti" perchè:

    1. La tabella ticket ha per ogni campo degli id esterni... per spiegarmi meglio vi mostro la tabella ridotta:
    id - id_ticket - id_padre - id_chi_ha_aperto - id_operatore - id_categoria etc...

    Quindi immaginate che per mostrare la pagina del riepilogo dei ticket ci sta innanzitutto la query per pescare quei 100 ticket (sto dicendo 100, ma è tutto molto dinamico, i ticket si aprono e si chiudono molto dinamicamente)... Poi per ogni result si deve fare 1 query per ogni campo per andare a prendere i rispettivi valori nelle altre tabelle...

    Io è proprio questa cosa che vorrei "ottimizzare" perchè rallenta di un bel pò il caricamento della pagina...

    Come strutturereste voi la cosa? Grazie mille per i consigli...
    www.mtlook.it - Marketing & Image Management
    www.advise.it - Soluzioni informatiche per la tua azienda

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    ma... i JOIN no?

  3. #3
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    in che senso "una query per recuperare i valori dei singoli campi"?
    Se sono chiavi esterne, usa le JOIN nella query (ipoteticamente, una sola query che unisce le varie tabelle interessate)

  4. #4
    Cavolo, ecco che mi si apre un mondo La Join fino a quante tabelle garantisce buone prestazioni? Posso fare un unica query con una JOIN che unisce 4/5 tabelle?
    www.mtlook.it - Marketing & Image Management
    www.advise.it - Soluzioni informatiche per la tua azienda

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    dipende anche dalle tabelle... se imposti bene le condizioni possono essercene anche molte e si possono anche fare SELECT annidate... solitamente sempre più efficiente che esagerare con "php"

  6. #6
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Prima di scomodare il caching c'è un sacco di lavoro da fare, innanzitutto ottimizzazione del database e ove possibile effettuare ciò che si chiama normalizzazione.
    Fatto questo poi oltre alle JOIN come già suggerito puoi successivamente affrontare il tuo problema utilizzando VIEW (queste più aumentare le prestazioni ti aiuteranno ad avere un codice PHP più pulito e leggibile) in quanto le logiche di JOIN verranno gestite dal DB.
    Cosa importantissima sia quando si usano le JOIN o comunque quando si fanno ricerche e questi è l'adozioni di indici.

    Gli indici sono tanto più efficaci tanto più variegata è la "popolazione" del campo. Mi spiego, se in una tabella hai due campi, field1 e field2 dove il primo ha i seguenti valori:

    1,2,1,2,1,2,1,2,1,2,1,2,1,2

    Ed il secondo i seguenti:

    1,2,3,4,5,6,7,8,9,10,11,12

    È meglio utilizzare un indice sul secondo campo piuttosto che sul primo, ammesso e concesso che sia un campo utilizzato per fare ricerche o JOIN.

    Altre cose interessanti ed importanti da sapere, tra queste due query:
    Codice PHP:
    SELECT idid_ticketid_padreid_chi_ha_apertoid_operatoreid_categoria 
    FROM mytable 
    WHERE id_ticket 
    '11111' OR id_ticket '22222' 
    Codice PHP:
    SELECT idid_ticketid_padreid_chi_ha_apertoid_operatoreid_categoria 
    FROM mytable WHERE id_ticket 
    '11111' 
    UNION 
    SELECT id
    id_ticketid_padreid_chi_ha_apertoid_operatoreid_categoria 
    FROM mytable WHERE id_ticket 
    '22222' 
    La seconda è più veloce perchè la prima deve creare una tabella temporanea per darti un risultato.

    Che altro dire, una volta fatto questo, ci sarebbe da guardare ed ottimizzare il codice.

    Indipendentemente da questo comunque, io raccomando sempre di installare sul server dove l'applicazione gira APC, il solo fatto di installarlo ti darà incrementi di prestazioni visibili.

    Direi che di cosine da guardare te ne ho date parecchie e anche troppe forse

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.