Newsgroup: it.comp.www.php
Titolo: Php vs Mysql

Non sono sicuro di essere del tutto IT ma neanche il contrario. E cmq non 
ho trovato un ng su mysql.
Sono piu' veloci le query sql o i cicli in php?
Dovendo associare i dati di piu' tabelle č piu' rapida una left join o 
usare qualche semplice select, mettere in array e lavorare di foreach, if 
e compagnia bella?
Questo ponendo il semplice caso di un server che faccia girare sia php 
che mysql (cioč lo script non si collega a un server sql dedicato).
Ciao e grazie
Tac
--  
Best Regards,   Tac
http://tacone.cjb.net
http://aikitac.cjb.net
 [AikiTAC's Back]

e compagnia bella?
compagnia bella.
Mi sono trovato nella necessita di mettere insieme tre o quattro
tabelle e con i join stava diventando ingestibile: troppo lento.
Utilizzare array di supporto e' stata la mossa che ha risolto il
tutto.

 e compagnia bella?
idem!
ciao
-- 
punkarruso

 tutto.
probabilmente dipende anche dal tipo di dati che devi estrarre...
sono convinto comunque che nella maggiorparte dei casi via query sia più 
veloce.
ciao!
-- 
punkarruso

idem!
ti assicuro che non e' cosi': quando arrivi a quattro-cinque join in
una stessa query, la cosa diventa semplicemente ingestibile, mentre
via php riesci a fare il tutto velocemente.

 via php riesci a fare il tutto velocemente.
su quanti dati lavori?
ogni tabella quanti record ha?
che tipo di dati contengono?
che tipo di query devi effettuare?
se posti un esempio possiamo fare dei benchmarks:
tra 1 o 2 soluzioni in php e 1 o 2 soluzioni mysql!
:-)
ciao
-- 
punkarruso

veloce.
Arrivavo a 7 join innestati.

ecco, lo sapevo, stavi rispondendo in questo ramo mentre io ero
nell'altro. Ora rispondo io in questo ramo del thread, mentre tu stai
nell'altro. Non c'e' un autogrill in questo ng, cosi' possiamo
incontrarci?



Farei notte a descriverti la base dati.
La query piu' complessa, espressa in linguaggio naturale, e':
"dimmi quanti memo sono associati ai contatti dei referenti dei
reparti degli indirizzi delle filiali dell'anagrafica".

 sono più veloci della luce!
Come si fà?


 
http://aikitac.cjb.net
 [AikiTAC's Back]
allora parto con il dirti che il "left join" è qualcosa di veramente 
lento a parità di indici applicati alle tabelle relative
ma puoi usare altre tecniche enormemente + veloci per fare il join come 
il natural join(ma qui dipende dalla struttura del database) o eliminare 
il "left join"(es "... FROM tab1 LEFT JOIN tab2 ON 
tab1.indice=tab2.indice") e applicare un semplice ".... FROM tab1,tab2 
WHERE tab1.indice=tab2.indice"
i guadagni in velocità sono impressionanti rispetto al left join, dalle 
mie prove circa il 150%

Come si fà?
http://www.mysql.com/doc/en/HEAP.html

 che mysql (cioè lo script non si collega a un server sql dedicato).


 WHERE tab1.indice=tab2.indice"
Il secondo esempio, da quanto ho capito io è limitato ad un solo livello 
di profondità (2 tabelle quindi).


 Tac
mmmm mi cogli un pò impreparato, perchè io uso il natural join sempre
ma penso che non sia cosi'
a naso direi
"... FROM tab1,tab2,tab3 WHERE tab1.indice=tab2.indice AND 
tab1.indice1=tab3.indice ...."
che dire ... prova =)

mie prove circa il 150%
Si', ma ottieni cose diverse :-)
Sicuramente, se fai un left join ma in realta' intendi un inner join e
non ci sono elementi orfani nella join, fai prima a fare l'inner join.
In caso contrario perdi gli orfani per strada.
Leonardo
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.

 Leonardo
cioè =)
io non volevo insegnare niente a nessuno ma ho solo messo nero su bianco 
le mie prove, ed eliminando tu tutti i LEFT JOIN(+ un qualche indice 
dimenticato =) sono passato da 2.5/3 sec a 0.03/0.04 nella generazione 
delle pagine del mio sito
lol scusa la domanda stupida ... cosa sono gli "elementi orfani"?
e da quello che ho capito con INNER JOIN ottengo prestazioni addirittura
superiori? anche in confronto ad un natural join(che io uso attualmente)?
o forse voleve dirmi che forse la mia forma ".... FROM tab1,tab2 WHERE 
tab1.indice=tab2.indice" è equivalente ad un INNER JOIN e non al LEFT 
JOIN(se fosse cosi' è meglio che mi imparo le differenze =)
se prima credevo di avere quasi capito come funzionano i JOIN, ora sono 
tornato nella confusione =)
grazie mille

 lol scusa la domanda stupida ... cosa sono gli "elementi orfani"?
Esempio:
INSERT INTO tabellaA (id_a, nome) VALUE (1, 'uno');
INSERT INTO tabellaA (id_a, nome) VALUE (2, 'due');
INSERT INTO tabellaA (id_a, nome) VALUE (3, 'tre');
INSERT INTO tabellaB (id_b, nome_b, a_fk) VALUE (1, 'unob', 1);
INSERT INTO tabellaB (id_b, nome_b, a_fk) VALUE (2, 'dueb', 2);
SELECT id_a, nome, id_b, nome_b FROM a LEFT JOIN b ON a_fk=id_a;
ritorna:
1, 'uno', 1, 'uno_b'
2, 'due', 2, 'due_b'
3, 'tre', NULL, NULL
SELECT id_a, nome, id_b, nome_b FROM a, b WHERE a_fk=id_a;
ritorna:
1, 'uno', 1, 'uno_b'
2, 'due', 2, 'due_b'
Il record 3 della tabellaA non ha corrispondenti nella tabellaB e quindi
resta orfano.
S*

Silvio Sosio ha scritto:

non ho elementi orfani nelle mie tabelle
involontariamente mi è andata bene =)
anche oggi ho imparato qualcosa =)
grazie mille per la chiara ed esaudiente risposta
Andrea

 Sono piu' veloci le query sql o i cicli in php?
Le prestazioni delle query di mysql dipendono fortemente 
dall'organizzazione fisica dei dati.
Premesso ciň non c'č dubbio che per ogni query esista una organizzazione 
fisica di quelle tabelle che renda l'esecuzione piů veloce da mysql 
piuttosto che da PHP di svariati ordini di grandezza (ovviamente se 
'computiamo' dati non c'č motivo di credere che un DataBase sia meno 
ottimizzato di un linguaggio che usa quello stesso database... 
altrimenti i programmatori di mysql avrebbero scritto il motore in php 
con i 'foreach', non credi??).
Bisogna sempre in fase di progettazione fare una analisi delle query che 
verranno sottoposte al fine di garantire la miglior ottimizzazione per 
quanto riguarda l'organizzazione fisica dei dati.
ciao
Alesi_27

 
Certo, č logico, ma č un ragionamento generale e come tutte le 
supposizioni di questo tipo non prende in considerazione fattori che 
potrebbero essere determinanti.
Grazie dell'info.


 
ciao
Alesi_27

 potrebbero essere determinanti.
anche dirti a priori se č piů veloce eseguire join mysql o php č un 
ragionamento generale... era una domanda a trabocchetto o cosa???
:-)
-- 
punkarruso

 :-)
Acc!:..


 Tac
il discorso è questo:
Mysql nel fare ciò che deve fare un DB è più veloce di PHP.
Se in circostanze particolari ci troviamo a verificare che un codice in 
PHP fà più velocemente un compito che spetta a Mysql allora abbiamo 
sbagliato qualcosa nel progetto della Base di Dati
ciao
Alesi_27