[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: mysql / postgresql



On Mon, 23 Sep 2002 16:00:06 +0200 (CEST)
Vincent Renardias <vincent@strongholdnet.com> wrote:

> 
> > > MySQL ne supporte pas les 'subselects' (ie: "select champ1,champ2 from
> > > table where champs2 in (select champ3 from table2 where condition)"), et
> > > pour beaucoup d'applications c'est indispensable.
> > 
> > Bof, dans quels cas c'est vraiment indispensable ? On peut toujours faire
> > autrement, notamment avec des tables temporaires.
> 
> C'est indispensable dans bcp de cas, car ca permet de simplifier bcp le
> code et c'est souvent bcp plus rapide que de faire plusieurs requetes
> successives...
> 
> > J'ai bossé dans une boîte sur une grosse base du genre 500 tables et 3000
> > procédures, les subselects étaient carrément interdits.
> 
> je n'ai qu'une vingtaine de tables dans ma plus grosse DB (PostgreSQL),
> certaines d'entre elles comportent plusieurs millions d'entrées, et avec
> les bons index aux bons endroits, les subselects se passent tres
> bien, et heureusement: je me vois mal faire des tables temporaires avec
> des 3 gigas de données...

L'argument est bidon parce qu'en interne quand tu fais un subselect il doit
créer une table temporaire, tu peux toujours remplacer :

select ... from a,... where a.x in (select ...) ...

par :

select ... into #x
select ... from a,#x,... where #x.col=a.col
drop table #x

Et encore la plupart des cas simples une phase intermédiaire n'est pas
indispensable, ca peut souvent se faire avec une seule jointure, même si
ca paraît plus facile avec un subselect ca peut être nul pour les performances,
donc interdire les subselects a au moins le mérite d'éviter aux débutants
de faire des conneries.

Une discussion des hackers de postgresql avant que ca soit implémenté :

http://www.geocrawler.com/archives/3/12/1997/10/0/29796/

Quand c'est bien utilisé ca peut donner un code plus court mais ca ne change
rien du point de vue des performances et ca n'est jamais bloquant, sinon je
voudrais voir un exemple et pas du fud.

Et puis les différences entre MySQL et PostgreSQL c'est dans le manuel de MySQL.

Alain



Reply to: