OVH Cloud OVH Cloud

Fonctionnement de l'instruction EXISTS

2 réponses
Avatar
Sébastien M
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 )

2 réponses

Avatar
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 )




Avatar
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 )
>
>