Un Evento Unico. 5 Sale. 27 Interventi. SEO, SOCIAL, E-Commerce, Mobile, Turismo.
CLICCA QUI e SCOPRI DI PIù X Chiudi
 
Forum GT: Condividiamo idee e conoscenza Forum GT: Condividiamo idee e conoscenza


Condividi questo contenuto nei Social Network:
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito.


Vai indietro   Forum per Webmaster: Condividiamo Idee e Conoscenza > Sviluppo e Gestione siti web > Php - Mysql
Benvenuto! Forum Regole FAQ Lista utenti Calendario Segna come letti


Rispondi
 
LinkBack Strumenti di discussione
Vecchio 02-01-09, 16:24   #1 (permalink)
User
 
Data di registrazione: May 2008
Messaggi: 67
Ottimizzazione di uno script: alcune query

Salve a tutti,
Sto lavorando ad uno script php che dovrà aggiornare un database di prodotti.
Così com'é adesso, a processare un file contenente una serie di prodotti mi impiega circa 37 secondi.
In produzione dovrà processarne intorno al centinaio o anche più, quindi si tratta di un tempo inaccettabile.

Ci sono due task, compiuti da questo file, a cui imputerei lo spreco di tempo.
Si tratta dell'inserimento delle categorie e del collegamento dei prodotti alle categorie.

Mi spiego: la struttura del db è, semplificando, questa:

prodotti(id, dati prodotto...)
categorie(id, nome)
collegamenti(prodotto, categoria)

E' chiaro che ogni prodotto può appartenere a diverse categorie.

Ora, due task vengono effettuati da php con l'ausilio di più query:
- L'inserimento di una categoria nel database: lo script controlla con una SELECT se la categoria esiste già, e se non esiste la crea con una INSERT.
Come posso far si che il controllo sull'esistenza avvenga direttamente nella query di INSERT?

- Il collegamento: per ogni categoria del prodotto viene fatta una SELECT per ottenerne l'ID (ne abbiamo infatti il nome) e una INSERT per inserire il collegamento.
Come posso far si che la INSERT ottenga direttamente da sola l'ID della categoria?

Non ho poi molta dimistichezza con l'SQL diciamo più che basilare.

Grazie in anticipo ^^
__________________

sydarex non in linea   Rispondi citando
Vecchio 02-01-09, 17:36   #2 (permalink)
User
 
Data di registrazione: Oct 2006
Messaggi: 287
Invia un messaggio tramite Skype a mikslap
Come posso far si che il controllo sull'esistenza avvenga direttamente nella query di INSERT?
Penso che potresti farlo assegnando al campo interessato, direttamente nel DATABASE, la chiave UNICA in modo che se venisse inserito un dato uguale il DATABASE lo rifiuta.

Come posso far si che la INSERT ottenga direttamente da sola l'ID della categoria?
In questo caso credo non ci sia niente da fare, se non controllando bene come funzionano le LEFT JOIN, anche se credo servano solo per la selezione di dati da più tabelle con una sola query
mikslap non in linea   Rispondi citando
Vecchio 02-01-09, 18:16   #3 (permalink)
User
 
Data di registrazione: May 2008
Messaggi: 67
Quote:
mikslap Visualizza il messaggio
Come posso far si che il controllo sull'esistenza avvenga direttamente nella query di INSERT?
Penso che potresti farlo assegnando al campo interessato, direttamente nel DATABASE, la chiave UNICA in modo che se venisse inserito un dato uguale il DATABASE lo rifiuta.
Mmh, si hai ragione!
Quote:
mikslap Visualizza il messaggio
Come posso far si che la INSERT ottenga direttamente da sola l'ID della categoria?
In questo caso credo non ci sia niente da fare, se non controllando bene come funzionano le LEFT JOIN, anche se credo servano solo per la selezione di dati da più tabelle con una sola query
Possibile non si possa fare con una subquery?
__________________

sydarex non in linea   Rispondi citando
Vecchio 03-01-09, 16:30   #4 (permalink)
User
 
Data di registrazione: Oct 2006
Messaggi: 287
Invia un messaggio tramite Skype a mikslap
Le subquery selezionano solamente.
Credo !!!!!!!!!!!!!
mikslap non in linea   Rispondi citando
Vecchio 03-01-09, 17:48   #5 (permalink)
User
 
Data di registrazione: May 2008
Messaggi: 67
Infatti, usando una subquery SELECT che seleziona l'id all'interno di una INSERT funziona perfettamente..
__________________

sydarex non in linea   Rispondi citando
Vecchio 03-01-09, 21:01   #6 (permalink)
User
 
Data di registrazione: Oct 2006
Messaggi: 287
Invia un messaggio tramite Skype a mikslap
[..]
Si il tutto va a buon fine.
Ma alla fine dei conti ti ritrovi con i tempi di selezione o non cambia niente.

Ultima modifica di Samyorn : 05-01-09 01:25. Motivo: Inutile quotare il messaggio a cui si risponde.
mikslap non in linea   Rispondi citando
Vecchio 04-01-09, 15:20   #7 (permalink)
User
 
Data di registrazione: May 2008
Messaggi: 67
Guadagno un secondo in media, sempre assurdamente poco.
Farò un profiling dello script per capire dov'é che rallenta tanto.
__________________

sydarex non in linea   Rispondi citando
Rispondi


Strumenti di discussione

Regole di scrittura
Non puoi postare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi allegare file
Non puoi editare i tuoi post

BB code is Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Attivo
Pingbacks are Attivo
Refbacks are Disattivato
Vai al forum



Tutti gli orari sono GMT +3. Attualmente sono le 15:18.




Forum GT - © 2004-2009 GT idea S.r.l P.iva 02418200800 - Privacy/Disclaimer

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.