2017-08-10 5 views
-2

Je suis curieux de savoir exactement comment sqldeveloper fait le travail lorsque nous interrogeons des données à travers plusieurs tables en utilisant DISTINCT mot-clé.Quelle est la performance lors de l'extraction de données à partir de plusieurs tables en utilisant DISTINCT mot-clé

La raison pour laquelle je pose cette question parce que je vois qu'il faut beaucoup de temps pour sqldeveloper me chercher les résultats lorsque j'utilise mot-clé DISTINCT

+1

'EXPLAIN PLAN' pour les deux requêtes: avec et sans DISTINCT – lad2025

+0

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é. –

+0

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

Répondre

3

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.