Lorsque vous spécifiez select distinct
, la base de données doit passer par l'effort supprimer les valeurs en double.
Dans une minorité de cas, toutes les colonnes/expressions du select
peuvent être dans un index. Si c'est le cas, Oracle devrait être assez intelligent pour utiliser l'index. Dans ce cas, le peut ne pas avoir un impact important sur les performances.
Sinon, la base de données doit agréger les données. Les mêmes algorithmes sont disponibles pour select distinct
comme pour group by
. Il y en a beaucoup, mais ils seront certainement plus lents que de ne pas utiliser select distinct
. Un autre facteur est que la base de données ne renverra pas aucun résultat tant qu'elle n'aura pas supprimé les doublons du jeu de résultats. Dans d'autres cas, la base de données peut commencer à supprimer des lignes lorsqu'elles sont disponibles.
Vous ne devez utiliser select distinct
que si vous en avez vraiment besoin, sachant que vous encourez des frais supplémentaires pour l'exécution de la requête.
'EXPLAIN PLAN' pour les deux requêtes: avec et sans DISTINCT – lad2025
Précisez aussi comment vous interrogez - si 'instruction d'exécution', seules les 50 premières lignes (par défaut) sont récupérées dans la grille de données; ajouter 'distinct' (ou' order by' etc.) signifie que plus de données doivent être traitées avant que tout ne puisse être retourné/affiché. –
SqlDeveloper ne fait pas le travail. Il transmet simplement votre requête à la base de données à traiter. Comme vous avez un distinct, il affichera uniquement les résultats lorsque la base de données aura traité l'ensemble des résultats. – BriteSponge