j'aimerai juste savoir que fait postgresql lors qu'un requète comme celle-ci
SELECT idobj, ... FROM table1
LEFT OUTER JOIN (SELECT idobj, count(*) FORM table2) AS tmptable ON
table1.idobj = tmptable.idobj
WHERE iduser = 150;
ma question est est ce que
SELECT idobj, count(*) FORM table2
va parcourir toute la base ou va t il réussir a limiter ses calculs aux
idobj qui sont eux meme retournés par la requete principale.
Sinon je pourrai faire un
SELECT idobj, ..., count(*) FROM table1
LEFT OUTER JOIN table2 ON table1.idobj = table2.idobj
GROUP BY idobj, ...
WHERE iduser = 150;
mais bon comme le
idobj, ... peut être treeeees treeeees long.
je me demandais si cela avait un impact au niveau des performance.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Sebastien Lardiere
Le 29/06/2010 15:59, Etienne a écrit :
Salut.
j'aimerai juste savoir que fait postgresql lors qu'un requète comme celle-ci
SELECT idobj, ... FROM table1 LEFT OUTER JOIN (SELECT idobj, count(*) FORM table2) AS tmptable ON table1.idobj = tmptable.idobj WHERE iduser = 150;
Il manque un group by, non ?
SELECT idobj, ... FROM table1 LEFT OUTER JOIN (SELECT idobj, count(*) FORM table2 group by idobj ) AS tmptable ON table1.idobj = tmptable.idobj WHERE iduser = 150;
ma question est est ce que SELECT idobj, count(*) FORM table2 va parcourir toute la base ou va t il réussir a limiter ses calculs aux idobj qui sont eux meme retournés par la requete principale.
Je ne pense pas que cette requete fonctionne, en fait.
Sinon je pourrai faire un SELECT idobj, ..., count(*) FROM table1 LEFT OUTER JOIN table2 ON table1.idobj = table2.idobj GROUP BY idobj, ... WHERE iduser = 150;
mais bon comme le idobj, ... peut être treeeees treeeees long. je me demandais si cela avait un impact au niveau des performance.
Je ne sais pas si ça peut marcher. Par contre, l'écriture suivante peut-être juste :
SELECT idobj, ..., (select count(*) from table2 where table2.idobj = table1.idobj ) as count
FROM table1 WHERE iduser = 150 ;
Pas sûr que ça soit mieux la première requête proposée.
Avec la commande EXPLAIN de PostgreSQL, il est assez facile de savoir comment PostgreSQL interprète la requête.
-- Sébastien
Le 29/06/2010 15:59, Etienne a écrit :
Salut.
j'aimerai juste savoir que fait postgresql lors qu'un requète comme
celle-ci
SELECT idobj, ... FROM table1
LEFT OUTER JOIN (SELECT idobj, count(*) FORM table2) AS tmptable ON
table1.idobj = tmptable.idobj
WHERE iduser = 150;
Il manque un group by, non ?
SELECT idobj, ...
FROM table1
LEFT OUTER JOIN
(SELECT idobj, count(*) FORM table2 group by idobj ) AS tmptable
ON table1.idobj = tmptable.idobj
WHERE iduser = 150;
ma question est est ce que
SELECT idobj, count(*) FORM table2
va parcourir toute la base ou va t il réussir a limiter ses calculs aux
idobj qui sont eux meme retournés par la requete principale.
Je ne pense pas que cette requete fonctionne, en fait.
Sinon je pourrai faire un
SELECT idobj, ..., count(*) FROM table1
LEFT OUTER JOIN table2 ON table1.idobj = table2.idobj
GROUP BY idobj, ...
WHERE iduser = 150;
mais bon comme le
idobj, ... peut être treeeees treeeees long.
je me demandais si cela avait un impact au niveau des performance.
Je ne sais pas si ça peut marcher. Par contre, l'écriture suivante
peut-être juste :
SELECT
idobj,
...,
(select count(*)
from table2
where table2.idobj = table1.idobj ) as count
FROM table1
WHERE iduser = 150
;
Pas sûr que ça soit mieux la première requête proposée.
Avec la commande EXPLAIN de PostgreSQL, il est assez facile de savoir
comment PostgreSQL interprète la requête.
j'aimerai juste savoir que fait postgresql lors qu'un requète comme celle-ci
SELECT idobj, ... FROM table1 LEFT OUTER JOIN (SELECT idobj, count(*) FORM table2) AS tmptable ON table1.idobj = tmptable.idobj WHERE iduser = 150;
Il manque un group by, non ?
SELECT idobj, ... FROM table1 LEFT OUTER JOIN (SELECT idobj, count(*) FORM table2 group by idobj ) AS tmptable ON table1.idobj = tmptable.idobj WHERE iduser = 150;
ma question est est ce que SELECT idobj, count(*) FORM table2 va parcourir toute la base ou va t il réussir a limiter ses calculs aux idobj qui sont eux meme retournés par la requete principale.
Je ne pense pas que cette requete fonctionne, en fait.
Sinon je pourrai faire un SELECT idobj, ..., count(*) FROM table1 LEFT OUTER JOIN table2 ON table1.idobj = table2.idobj GROUP BY idobj, ... WHERE iduser = 150;
mais bon comme le idobj, ... peut être treeeees treeeees long. je me demandais si cela avait un impact au niveau des performance.
Je ne sais pas si ça peut marcher. Par contre, l'écriture suivante peut-être juste :
SELECT idobj, ..., (select count(*) from table2 where table2.idobj = table1.idobj ) as count
FROM table1 WHERE iduser = 150 ;
Pas sûr que ça soit mieux la première requête proposée.
Avec la commande EXPLAIN de PostgreSQL, il est assez facile de savoir comment PostgreSQL interprète la requête.
-- Sébastien
Alain Montfranc
Etienne a écrit :
Salut.
j'aimerai juste savoir que fait postgresql lors qu'un requète comme celle-ci
La commande "explain" est souvent bien utile :-D
Etienne a écrit :
Salut.
j'aimerai juste savoir que fait postgresql lors qu'un requète comme celle-ci
j'aimerai juste savoir que fait postgresql lors qu'un requète comme celle-ci
La commande "explain" est souvent bien utile :-D
Etienne
Le 29/06/2010 16:09, Sebastien Lardiere a écrit :
Le 29/06/2010 15:59, Etienne a écrit : Il manque un group by, non ?
SELECT idobj, ... FROM table1 LEFT OUTER JOIN (SELECT idobj, count(*) FORM table2 group by idobj ) AS tmptable ON table1.idobj = tmptable.idobj WHERE iduser = 150;
Oui! j'ai taper ca directement dans le message... question de simplifier la requete qui etait un peu longue!
Je ne pense pas que cette requete fonctionne, en fait.
oui enfin avec le group by !!!
Je ne sais pas si ça peut marcher. Par contre, l'écriture suivante peut-être juste :
SELECT idobj, ..., (select count(*) from table2 where table2.idobj = table1.idobj ) as count
FROM table1 WHERE iduser = 150 ;
ah ben voila super. il me semblait bien que c'etait possible. je vais tester.
Avec la commande EXPLAIN de PostgreSQL, il est assez facile de savoir comment PostgreSQL interprète la requête.
Merci Etienne
Le 29/06/2010 16:09, Sebastien Lardiere a écrit :
Le 29/06/2010 15:59, Etienne a écrit :
Il manque un group by, non ?
SELECT idobj, ...
FROM table1
LEFT OUTER JOIN
(SELECT idobj, count(*) FORM table2 group by idobj ) AS tmptable
ON table1.idobj = tmptable.idobj
WHERE iduser = 150;
Oui! j'ai taper ca directement dans le message...
question de simplifier la requete qui etait un peu longue!
Je ne pense pas que cette requete fonctionne, en fait.
oui enfin avec le group by !!!
Je ne sais pas si ça peut marcher. Par contre, l'écriture suivante
peut-être juste :
SELECT
idobj,
...,
(select count(*)
from table2
where table2.idobj = table1.idobj ) as count
FROM table1
WHERE iduser = 150
;
ah ben voila super. il me semblait bien que c'etait possible. je vais
tester.
Avec la commande EXPLAIN de PostgreSQL, il est assez facile de savoir
comment PostgreSQL interprète la requête.
Le 29/06/2010 15:59, Etienne a écrit : Il manque un group by, non ?
SELECT idobj, ... FROM table1 LEFT OUTER JOIN (SELECT idobj, count(*) FORM table2 group by idobj ) AS tmptable ON table1.idobj = tmptable.idobj WHERE iduser = 150;
Oui! j'ai taper ca directement dans le message... question de simplifier la requete qui etait un peu longue!
Je ne pense pas que cette requete fonctionne, en fait.
oui enfin avec le group by !!!
Je ne sais pas si ça peut marcher. Par contre, l'écriture suivante peut-être juste :
SELECT idobj, ..., (select count(*) from table2 where table2.idobj = table1.idobj ) as count
FROM table1 WHERE iduser = 150 ;
ah ben voila super. il me semblait bien que c'etait possible. je vais tester.
Avec la commande EXPLAIN de PostgreSQL, il est assez facile de savoir comment PostgreSQL interprète la requête.
Merci Etienne
Etienne
Le 29/06/2010 17:18, Alain Montfranc a écrit :
La commande "explain" est souvent bien utile :-D
Oui pour peu qu'on arrive a y comprendre quelqueschose au explain analyze :)
Etienne
Le 29/06/2010 17:18, Alain Montfranc a écrit :
La commande "explain" est souvent bien utile :-D
Oui pour peu qu'on arrive a y comprendre quelqueschose au explain analyze :)