Je ne maitrise pas bien le fonctionnement de l'instruction EXISTS en termes
de performance.
laquelle de ces requêtes est la plus pertinente (en particulier si la
sous-requête retourne un grand nombre de lignes)?
SELECT ...
FROM ...
WHERE EXISTS (SELECT 1 FROM table1
WHERE table3.table2id = table1.table2id
AND table1.colonne2 = table4.colonne2
AND table1.Colonne1 = table4.Colonne1)
OU
SELECT...
FROM....
WHERE table3.table2id IN (SELECT DISTINCT table2id FROM table1
WHERE table1.colonne2 = table4.colonne2
AND table1.Colonne1 = table4.Colonne1)
L'idée est de savoir si dans le cas de l'EXISTS il va parcourir toute la
table ou s'arrêter à la primière valeur qui correspond au critère. 'Sachant
que le IN est traduit en une série de OR et que le DISTINCT peut être
couteux, sauf si dès qu'il en trouve un à TRUE il s'arrête ce que je ne sais
pas )
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
Laurent Moreau
Tu peux comparer le plan d'execution de ces 2 requetes. Je pense qu'il sera identique.
Laurent.
"Sébastien M" wrote in message news:btjn79$c7k$
Bonjour et bonne années à tous,
Je ne maitrise pas bien le fonctionnement de l'instruction EXISTS en
termes
de performance.
laquelle de ces requêtes est la plus pertinente (en particulier si la sous-requête retourne un grand nombre de lignes)?
SELECT ... FROM ... WHERE EXISTS (SELECT 1 FROM table1 WHERE table3.table2id = table1.table2id AND table1.colonne2 = table4.colonne2 AND table1.Colonne1 = table4.Colonne1)
OU
SELECT... FROM.... WHERE table3.table2id IN (SELECT DISTINCT table2id FROM table1 WHERE table1.colonne2 = table4.colonne2 AND table1.Colonne1 = table4.Colonne1)
L'idée est de savoir si dans le cas de l'EXISTS il va parcourir toute la table ou s'arrêter à la primière valeur qui correspond au critère.
'Sachant
que le IN est traduit en une série de OR et que le DISTINCT peut être couteux, sauf si dès qu'il en trouve un à TRUE il s'arrête ce que je ne
sais
pas )
Tu peux comparer le plan d'execution de ces 2 requetes.
Je pense qu'il sera identique.
Laurent.
"Sébastien M" <la_carte@netcourrier.com> wrote in message
news:btjn79$c7k$1@s1.read.news.oleane.net...
Bonjour et bonne années à tous,
Je ne maitrise pas bien le fonctionnement de l'instruction EXISTS en
termes
de performance.
laquelle de ces requêtes est la plus pertinente (en particulier si la
sous-requête retourne un grand nombre de lignes)?
SELECT ...
FROM ...
WHERE EXISTS (SELECT 1 FROM table1
WHERE table3.table2id = table1.table2id
AND table1.colonne2 = table4.colonne2
AND table1.Colonne1 = table4.Colonne1)
OU
SELECT...
FROM....
WHERE table3.table2id IN (SELECT DISTINCT table2id FROM table1
WHERE table1.colonne2 = table4.colonne2
AND table1.Colonne1 = table4.Colonne1)
L'idée est de savoir si dans le cas de l'EXISTS il va parcourir toute la
table ou s'arrêter à la primière valeur qui correspond au critère.
'Sachant
que le IN est traduit en une série de OR et que le DISTINCT peut être
couteux, sauf si dès qu'il en trouve un à TRUE il s'arrête ce que je ne
Tu peux comparer le plan d'execution de ces 2 requetes. Je pense qu'il sera identique.
Laurent.
"Sébastien M" wrote in message news:btjn79$c7k$
Bonjour et bonne années à tous,
Je ne maitrise pas bien le fonctionnement de l'instruction EXISTS en
termes
de performance.
laquelle de ces requêtes est la plus pertinente (en particulier si la sous-requête retourne un grand nombre de lignes)?
SELECT ... FROM ... WHERE EXISTS (SELECT 1 FROM table1 WHERE table3.table2id = table1.table2id AND table1.colonne2 = table4.colonne2 AND table1.Colonne1 = table4.Colonne1)
OU
SELECT... FROM.... WHERE table3.table2id IN (SELECT DISTINCT table2id FROM table1 WHERE table1.colonne2 = table4.colonne2 AND table1.Colonne1 = table4.Colonne1)
L'idée est de savoir si dans le cas de l'EXISTS il va parcourir toute la table ou s'arrêter à la primière valeur qui correspond au critère.
'Sachant
que le IN est traduit en une série de OR et que le DISTINCT peut être couteux, sauf si dès qu'il en trouve un à TRUE il s'arrête ce que je ne
sais
pas )
Sébastien M
Effectivement. Inutile de se poser trop de questions, l'optimiseur fait tout le boulot!
Merci et bonne journée.
"Laurent Moreau" a écrit dans le message news: btjote$dgn$
Tu peux comparer le plan d'execution de ces 2 requetes. Je pense qu'il sera identique.
Laurent.
"Sébastien M" wrote in message news:btjn79$c7k$ > Bonjour et bonne années à tous, > > Je ne maitrise pas bien le fonctionnement de l'instruction EXISTS en termes > de performance. > > laquelle de ces requêtes est la plus pertinente (en particulier si la > sous-requête retourne un grand nombre de lignes)? > > SELECT ... > FROM ... > WHERE EXISTS (SELECT 1 FROM table1 > WHERE table3.table2id = table1.table2id > AND table1.colonne2 = table4.colonne2 > AND table1.Colonne1 = table4.Colonne1) > > > OU > > SELECT... > FROM.... > WHERE table3.table2id IN (SELECT DISTINCT table2id FROM table1 > WHERE table1.colonne2 = table4.colonne2 > AND table1.Colonne1 = table4.Colonne1) > > > L'idée est de savoir si dans le cas de l'EXISTS il va parcourir toute la > table ou s'arrêter à la primière valeur qui correspond au critère. 'Sachant > que le IN est traduit en une série de OR et que le DISTINCT peut être > couteux, sauf si dès qu'il en trouve un à TRUE il s'arrête ce que je ne sais > pas ) > >
Effectivement. Inutile de se poser trop de questions, l'optimiseur fait tout
le boulot!
Merci et bonne journée.
"Laurent Moreau" <l.moreau@SUPPRIMERCECIsystonic.fr> a écrit dans le message
news: btjote$dgn$1@s1.read.news.oleane.net...
Tu peux comparer le plan d'execution de ces 2 requetes.
Je pense qu'il sera identique.
Laurent.
"Sébastien M" <la_carte@netcourrier.com> wrote in message
news:btjn79$c7k$1@s1.read.news.oleane.net...
> Bonjour et bonne années à tous,
>
> Je ne maitrise pas bien le fonctionnement de l'instruction EXISTS en
termes
> de performance.
>
> laquelle de ces requêtes est la plus pertinente (en particulier si la
> sous-requête retourne un grand nombre de lignes)?
>
> SELECT ...
> FROM ...
> WHERE EXISTS (SELECT 1 FROM table1
> WHERE table3.table2id = table1.table2id
> AND table1.colonne2 = table4.colonne2
> AND table1.Colonne1 = table4.Colonne1)
>
>
> OU
>
> SELECT...
> FROM....
> WHERE table3.table2id IN (SELECT DISTINCT table2id FROM table1
> WHERE table1.colonne2 = table4.colonne2
> AND table1.Colonne1 = table4.Colonne1)
>
>
> L'idée est de savoir si dans le cas de l'EXISTS il va parcourir toute la
> table ou s'arrêter à la primière valeur qui correspond au critère.
'Sachant
> que le IN est traduit en une série de OR et que le DISTINCT peut être
> couteux, sauf si dès qu'il en trouve un à TRUE il s'arrête ce que je ne
sais
> pas )
>
>
Effectivement. Inutile de se poser trop de questions, l'optimiseur fait tout le boulot!
Merci et bonne journée.
"Laurent Moreau" a écrit dans le message news: btjote$dgn$
Tu peux comparer le plan d'execution de ces 2 requetes. Je pense qu'il sera identique.
Laurent.
"Sébastien M" wrote in message news:btjn79$c7k$ > Bonjour et bonne années à tous, > > Je ne maitrise pas bien le fonctionnement de l'instruction EXISTS en termes > de performance. > > laquelle de ces requêtes est la plus pertinente (en particulier si la > sous-requête retourne un grand nombre de lignes)? > > SELECT ... > FROM ... > WHERE EXISTS (SELECT 1 FROM table1 > WHERE table3.table2id = table1.table2id > AND table1.colonne2 = table4.colonne2 > AND table1.Colonne1 = table4.Colonne1) > > > OU > > SELECT... > FROM.... > WHERE table3.table2id IN (SELECT DISTINCT table2id FROM table1 > WHERE table1.colonne2 = table4.colonne2 > AND table1.Colonne1 = table4.Colonne1) > > > L'idée est de savoir si dans le cas de l'EXISTS il va parcourir toute la > table ou s'arrêter à la primière valeur qui correspond au critère. 'Sachant > que le IN est traduit en une série de OR et que le DISTINCT peut être > couteux, sauf si dès qu'il en trouve un à TRUE il s'arrête ce que je ne sais > pas ) > >