Bonjour,
J'utilise régulièrement l'opérateur EXISTS avec sous requête lorsque je veux vérifier qu'une donnée est bien présente dans une table.
Toutefois, j'ai vu plusieurs exemples d'utilisation de cet opérateur dans divers tutos cet opérateur, et je reste circonspect d'un point de vue performance sur la forme des sous requêtes utilisées.
Voici plusieurs exemples :
Exemple 1 avec SELECT * :
Exemple 2 avec SELECT MON_FIELD
Code : Sélectionner tout - Visualiser dans une fenêtre à part WHERE EXISTS (SELECT * FROM MATABLE WHERE ...)
Dans l'exemple 1, l'opérateur EXISTS reçoit une subquery qui renvoie tous les champs de la table. Je suppose qu'il s'agit d'une mauvaise pratique. Quel intérêt de ramener tous les champs pour simplement vérifier une existence ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part WHERE EXISTS (SELECT MON_FIELD FROM MATABLE WHERE ...)
Dans l'exemple 2, l'opérateur EXISTS reçoit une subquery qui renvoie un seul champ de la table. C'est déjà mieux AMHA. Toutefois, doit on privilégier le champs correspondant à la PK de la table ? Ou tout autre champs peut il faire l'affaire ? Quelle est la bonne pratique à ce niveau ?
Vous remerciant par avance pour vos lumières.
PS : Ceci n'est pas un débat sur l'opportunité d'utiliser EXISTS vs JOIN vs IN . Juste une question pour connaitre la meilleure manière de procéder lorsque l'on utilise EXISTS.
Partager