J'ai une requête joignant plusieurs tables et retourner quelques colonnes.
Une colonne indexée d'une autre table fait référence à la PK de l'une de ces tableaux jointes. Maintenant, je voudrais ajouter une autre colonne à la requête indiquant que si au moins une ligne avec cet identifiant existe dans la nouvelle table. P>
Donc, si j'ai une des tables anciennes p>
ID REF_EXISTS 1 1 2 0 3 1
4 Réponses :
Utilisation: ajouté distinct code> pour assurer uniquement des lignes uniques sont affichées. P> P>
Merci, la version mise à jour a pris environ 0,17 ans dans mon test.
A le groupe EDIT: Vous pouvez le réécrire sans groupe rejoindre code> pourrait renvoyer plusieurs lignes pour un identifiant, comme pour
ID = 1 code> dans l'exemple de données. Vous pouvez la limiter à une ligne par carte d'identité avec un groupe par:
par code> garantit qu'il n'y a qu'une seule ligne par pièce d'identité. Et
comptage (distinct t2.ref_id) code> sera 1 si une ligne est trouvée et 0 sinon. P>
>, mais je doute que cela faciliterait les choses: p>
Oui, cela fonctionnerait. Mais j'aimerais éviter le groupe, car je sélectionne des 30 autres colonnes ... toute autre idée?
Mon expérience dit utiliser le premier pour une meilleure efficacité. Si vous avez un index sur t2.ref_id oracle devrait être assez intelligent de l'utiliser. Assurez-vous d'utiliser Explan Plan comme vous le souhaitez.
Vous avez raison, le premier était plus efficace dans mon test (0,20). Il n'a pas utilisé l'index sur t2.ref_id, en fournissant l'indice à utiliser qui a entraîné la même performance (plan d'exécution différent, cependant). La deuxième requête est la seule à condition que l'indice ait besoin de l'index sur t2.ref_id (0,25s), lorsque l'index n'existe pas, il faut environ 3 minutes :)
Une autre option:
+1 Depuis que vous m'avez battu par 7 minutes avec cette requête. Celui-ci est joliment des groupes Ref_id's avant l'externe rejoignant l'ensemble sur Old_Table. J'utiliserais nvl2 (n.ref_id, 1,0) au lieu de votre expression de cas cependant.
Celui-ci est la requête la plus rapide, temps de test moyen de 0,06S. Et pas besoin de groupe par :)
Je voudrais: à condition que vous disposiez d'index sur le PK et le FK, vous vous éloignerez avec une recherche de table et des recherches d'index. P>
K p> p>