doctorAle85
27-10-2009, 19:45
Prima ho aperto un post sulla copia di un DB da Postgre a Mysql perchè pensavo che MySQL fosse più veloce nell'eseguire query con viste...invece nn è assolutamente vero!
Il mio problema è questo...
Devo rispondere a delle query in 2 modi...
Nel primo modo utilizzo solo simboli di tabelle presenti nel DB, mentre nel 2° caso utilizzo solo viste.
Nel primo caso sebbene la query sql sia molto più lunga ci mette 200ms con Postgre, mentre per eseguire la query con le viste ci mette 3 sec.
Come cavolo è possibile? A me sembra una cosa assurda...
Non è che bisogna settare qualcosa in particolare?
Cioè, nn capisco come possa eserci questa differenza...
...nn vi sembra strano? :muro:
Vi copio le 2 query...
----------Query con simboli di tabelle del DB-----------
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , IH alias_1 , T alias_2 , VP alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term AND alias_3.term=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , IH alias_1 , TEL alias_2 , ISA alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term2 AND alias_3.term2=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , WF alias_1 , TEL alias_2 , CH alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term AND alias_3.term=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , WF alias_1 , TEL alias_2 , AP alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term AND alias_3.term=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , IH alias_1 , TEL alias_2 , AP alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term AND alias_3.term=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_1.term2, alias_3.term2 FROM P alias_0 , EA alias_1 , IH alias_2 , TEL alias_3 , NM alias_4 WHERE alias_0.term=alias_1.term1 AND alias_1.term1=alias_2.term1 AND alias_2.term2='c' AND alias_2.term1=alias_3.term1 AND alias_3.term1=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_3.term2 FROM EA alias_0 , TN alias_1 , IH alias_2 , TEL alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term1=alias_2.term1 AND alias_2.term2='c' AND alias_2.term1=alias_3.term1 AND alias_3.term1=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , IH alias_1 , TEL alias_2 , CH alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term AND alias_3.term=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_3.term2 FROM EA alias_0 , FP alias_1 , WF alias_2 , TEL alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term AND alias_1.term=alias_2.term1 AND alias_2.term2='c' AND alias_2.term1=alias_3.term1 AND alias_3.term1=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , WF alias_1 , TEL alias_2 , VP alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term AND alias_3.term=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_1.term2, alias_3.term2 FROM AP alias_0 , EA alias_1 , IH alias_2 , TEL alias_3 , NM alias_4 WHERE alias_0.term=alias_1.term1 AND alias_1.term1=alias_2.term1 AND alias_2.term2='c' AND alias_2.term1=alias_3.term1 AND alias_3.term1=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , WF alias_1 , TEL alias_2 , Dean alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term AND alias_3.term=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , IH alias_1 , TEL alias_2 , Dean alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term AND alias_3.term=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_1.term2, alias_3.term2 FROM P alias_0 , EA alias_1 , WF alias_2 , TEL alias_3 , NM alias_4 WHERE alias_0.term=alias_1.term1 AND alias_1.term1=alias_2.term1 AND alias_2.term2='c' AND alias_2.term1=alias_3.term1 AND alias_3.term1=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_3.term2 FROM EA alias_0 , TN alias_1 , WF alias_2 , TEL alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term1=alias_2.term1 AND alias_2.term2='c' AND alias_2.term1=alias_3.term1 AND alias_3.term1=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_1.term2, alias_3.term2 FROM AP alias_0 , EA alias_1 , WF alias_2 , TEL alias_3 , NM alias_4 WHERE alias_0.term=alias_1.term1 AND alias_1.term1=alias_2.term1 AND alias_2.term2='c' AND alias_2.term1=alias_3.term1 AND alias_3.term1=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , WF alias_1 , TEL alias_2 , ISA alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term2 AND alias_3.term2=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_3.term2 FROM EA alias_0 , FP alias_1 , IH alias_2 , TEL alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term AND alias_1.term=alias_2.term1 AND alias_2.term2='c' AND alias_2.term1=alias_3.term1 AND alias_3.term1=alias_4.term1
----------Query con simboli di vista-----------
SELECT DISTINCT VP.term AS term1,VNM.term2 AS term2,VEA.term2 AS term3,VTEL.term2 AS term4
FROM VP,VEA,VWF,VTEL,VNM
WHERE VP.term=VEA.term1 AND VWF.term1=VP.term AND VTEL.term1=VP.term AND VNM.term1=VP.term AND VWF.term2='c'
Il mio problema è questo...
Devo rispondere a delle query in 2 modi...
Nel primo modo utilizzo solo simboli di tabelle presenti nel DB, mentre nel 2° caso utilizzo solo viste.
Nel primo caso sebbene la query sql sia molto più lunga ci mette 200ms con Postgre, mentre per eseguire la query con le viste ci mette 3 sec.
Come cavolo è possibile? A me sembra una cosa assurda...
Non è che bisogna settare qualcosa in particolare?
Cioè, nn capisco come possa eserci questa differenza...
...nn vi sembra strano? :muro:
Vi copio le 2 query...
----------Query con simboli di tabelle del DB-----------
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , IH alias_1 , T alias_2 , VP alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term AND alias_3.term=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , IH alias_1 , TEL alias_2 , ISA alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term2 AND alias_3.term2=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , WF alias_1 , TEL alias_2 , CH alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term AND alias_3.term=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , WF alias_1 , TEL alias_2 , AP alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term AND alias_3.term=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , IH alias_1 , TEL alias_2 , AP alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term AND alias_3.term=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_1.term2, alias_3.term2 FROM P alias_0 , EA alias_1 , IH alias_2 , TEL alias_3 , NM alias_4 WHERE alias_0.term=alias_1.term1 AND alias_1.term1=alias_2.term1 AND alias_2.term2='c' AND alias_2.term1=alias_3.term1 AND alias_3.term1=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_3.term2 FROM EA alias_0 , TN alias_1 , IH alias_2 , TEL alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term1=alias_2.term1 AND alias_2.term2='c' AND alias_2.term1=alias_3.term1 AND alias_3.term1=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , IH alias_1 , TEL alias_2 , CH alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term AND alias_3.term=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_3.term2 FROM EA alias_0 , FP alias_1 , WF alias_2 , TEL alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term AND alias_1.term=alias_2.term1 AND alias_2.term2='c' AND alias_2.term1=alias_3.term1 AND alias_3.term1=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , WF alias_1 , TEL alias_2 , VP alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term AND alias_3.term=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_1.term2, alias_3.term2 FROM AP alias_0 , EA alias_1 , IH alias_2 , TEL alias_3 , NM alias_4 WHERE alias_0.term=alias_1.term1 AND alias_1.term1=alias_2.term1 AND alias_2.term2='c' AND alias_2.term1=alias_3.term1 AND alias_3.term1=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , WF alias_1 , TEL alias_2 , Dean alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term AND alias_3.term=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , IH alias_1 , TEL alias_2 , Dean alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term AND alias_3.term=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_1.term2, alias_3.term2 FROM P alias_0 , EA alias_1 , WF alias_2 , TEL alias_3 , NM alias_4 WHERE alias_0.term=alias_1.term1 AND alias_1.term1=alias_2.term1 AND alias_2.term2='c' AND alias_2.term1=alias_3.term1 AND alias_3.term1=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_3.term2 FROM EA alias_0 , TN alias_1 , WF alias_2 , TEL alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term1=alias_2.term1 AND alias_2.term2='c' AND alias_2.term1=alias_3.term1 AND alias_3.term1=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_1.term2, alias_3.term2 FROM AP alias_0 , EA alias_1 , WF alias_2 , TEL alias_3 , NM alias_4 WHERE alias_0.term=alias_1.term1 AND alias_1.term1=alias_2.term1 AND alias_2.term2='c' AND alias_2.term1=alias_3.term1 AND alias_3.term1=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_2.term2 FROM EA alias_0 , WF alias_1 , TEL alias_2 , ISA alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term1 AND alias_1.term2='c' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_3.term2 AND alias_3.term2=alias_4.term1
UNION
SELECT DISTINCT alias_4.term1, alias_4.term2, alias_0.term2, alias_3.term2 FROM EA alias_0 , FP alias_1 , IH alias_2 , TEL alias_3 , NM alias_4 WHERE alias_0.term1=alias_1.term AND alias_1.term=alias_2.term1 AND alias_2.term2='c' AND alias_2.term1=alias_3.term1 AND alias_3.term1=alias_4.term1
----------Query con simboli di vista-----------
SELECT DISTINCT VP.term AS term1,VNM.term2 AS term2,VEA.term2 AS term3,VTEL.term2 AS term4
FROM VP,VEA,VWF,VTEL,VNM
WHERE VP.term=VEA.term1 AND VWF.term1=VP.term AND VTEL.term1=VP.term AND VNM.term1=VP.term AND VWF.term2='c'