- Home
- Categorie
- Coding e Sistemistica
- PHP
- Query sql troppo lunga
-
Query sql troppo lunga
Ciao a tutti,
ho realizzando un gestionale su web di dimenzioni abbastanza notevoli.Ho iniziato anche il sito internet che andrà a far vedere tutti i dati contenuti in questo bel database sql ma giusto ieri sera mi sono impallato...
Mi spiego meglio, sono arrivato a fare una query che coinvolge due o tre tabelle stracolme di dati ( circa 500.000 inserimenti una e le altre circa 4-5.000 ) e mi impiega 20 secondi dal conteggio che mi da il pannello phpMyAdmin.
Sulla pagina web che me la va a contenere questo tempo "aumenta" perchè oltre a quella query ce ne sono anche altre e quindi il tempo di esecuzione di 30 secondi del php e sql non mi basta.
Ho quindi aumentato con l'apposita istruzione php il massimo tempo di esecuzione a 900.. in effetti se aspetto il tutto viene caricato.. ma devo aspettare più di un minuto!!
E qualsiasi utente dopo 10 secondi scappa via!!Esiste una qualche maniera per velocizzare il tutto!?
:bho:
-
Dovresti analizzare la tabella e capire dove è il collo di bottiglia.
prova ad anterporre "explain" alla query SQL e vedi cosa ti restituisce.
Magari ti basta inserire solamente alcuni indici.M.
-
Grazie per la risposta!
Comunque è la prima volta che uso questo comando sql e mi è stato restituita questa tabella :
pgmedia . it /explain.jpgche mi consiglieresti di fare?
-
Io inizierei a mettere un po' di indici sulle tre tabelle che ne sono sprovvisiti, soprattutto quella da 500K+ record.
M.
-
Abbi pazienza, cosa intendi per inserire degli indici?
Inserire degli id delle altre tabelle per rendere più facile il join?
-
No, inserire degli indici di mysql.
Leggi le istruzioni SQL di mysql relative ad
ADD INDEX (
12.1.8. CREATE INDEX Syntax)Con phpMyAdmin ci metti un attimo.
M.
-
UUU!!! Roba da matti... tempo impiegato : 0.3054 sec invece di 20 e passa!
Grazie infinite
Editato:
curiosità, è meglio un indice che coincolve il maggior numero di colonne possibile o il meno possibile?
-
Solo per il numero esatto di colonne interessate dalla ricerca.
Se cerchi per campo1 e campo2 insieme, allora crei un indice che contenga entrambi i campi.
Non ti serve creare degli indici per colonne su cui non effettui una ricerca.
M.