Optimisation de l'Oracle de la requête par la suppression de "existe" et "n'existe pas'

J'ai récemment déménagé un morceau de code en production sur une oracle base de données où l'un des plus développeur expérimenté qui a passé en revue, il mentionné, j'ai eu beaucoup trop de exists et not exists déclarations et qu'il devrait y avoir un moyen de les éliminer, mais il avait été trop longtemps depuis qu'il a eu à l'utiliser et ne me souviens pas de beaucoup sur la façon dont il a travaillé. Actuellement, je vais retourner et de faire le morceau de code plus maintenable que c'est une pièce susceptible d'être modifiée à plusieurs reprises dans les années à venir que de la logique métier et des exigences, de changement, et je voulais aller de l'avant et de l'optimiser tout en le rendant plus facile à gérer.

J'ai essayé de chercher, mais tout ce que je peux trouver est des recommandations sur le remplacement des not in avec not exists et de ne pas revenir sur les résultats réels.

En tant que tel, je me demande ce qui peut être fait pour optimiser hors exists/not exists ou si il y a une façon d'écrire exists/not exists de sorte que oracle permettra d'optimiser en interne (probablement à un peu mieux que je peux).

Par exemple, comment peut-on la suite être optimisé?

UPDATE
    SCOTT.TABLE_N N
SET
    N.VALUE_1 = 'Data!'
WHERE
    N.VALUE_2 = 'Y'
    AND
    EXISTS
    (
        SELECT
            1
        FROM
            SCOTT.TABLE_Q Q
        WHERE
            N.ID = Q.N_ID
    )
    AND
    NOT EXISTS
    (
        SELECT
            1
        FROM
            SCOTT.TABLE_W W
        WHERE
            N.ID = W.N_ID
    )
Par hasard, était le "plus de développeurs expérimentés" ont plus d'expérience avec MySQL? (En MySQL une jointure externe gauche avec un select ... où null fonctionne généralement mieux que l'un n'existe pas de clause, mais dans Oracle et de nombreuses autres bases de données n'existe pas de clause fonctionne généralement mieux.)
À ma connaissance, il est PL/SQL et faisait référence à l'Oracle PL/SQL Programmation par Steven Feuerstein comme la source d'où il a lu au sujet de l'optimisation. Il y a une chance qu'il pourrait avoir juste été mal se souvenir d'une optimisation différente, les humains ont un bug connu où les souvenirs peuvent être partiellement fausses.
Google recherche de livres semble toujours afficher cette page dans le livre que vous avez mentionné: les livres.google.co.royaume-uni/..." - ce qui n'est pas directement pertinente. Cependant, cette page web: dbpedias.com/wiki/Oracle:Coding_Best_Practices_-_Using_EXISTS/... (qui semble avoir été rédigé par M. Feuerstein) en fait essentiellement la même points que d'être ici, maintenant, en réponse, ci-dessous. Enfin, minus peut parfois dépasser le not exists - voir tech.dir.groups.yahoo.com/group/toad/message/... .
Une note de côté, mais il semble que le plsql étiquette a été modifiée pour être un sql tag. Si j'ai utilisé les deux, ou est-il une raison à cela à préférer sql?

OriginalL'auteur Lawtonfogle | 2013-04-25