Sous quelles conditions ROWNUM=1 augmenter de manière significative les performances d'une “existe” syle requête

J'ai lu quelques éléments de la discussion dans cette question et je me suis dit que dans mon code PL/SQL, j'ai "existe" style requêtes de tous sur la place qui n'utilisent pas le ROWNUM=1 optimisation.

Les questions que j'ai sont:

  1. L'introduction de ROWNUM=1 augmenter de manière significative la performance?
  2. Si oui, sous quelles conditions serait en particulier l'amélioration de la performance de l'e.g beaucoup de jointures, les contraintes non indexées sur des colonnes, des tables de grande taille, grands ensembles de résultats)

Je suis en train de déterminer de il vaut la peine de réécrire toutes mes requêtes existantes pour ajouter un ROWNUM=1 optimisation.

Les questions que je pense sont ceux qui peuvent avoir plusieurs jointures et peut demander des grandes tables. Ils ont la forme générale d':

SELECT 1
INTO ln_count
FROM table_1, table_2...., table_n
WHERE <various joins and conditions>;

IF ln_count > 0 THEN
  <do stuff>
END IF;

J'envisage de les changer:

SELECT 1
INTO ln_count
FROM table_1, table_2...., table_n
WHERE <various joins and conditions>
AND ROWNUM = 1;

IF <local variable> > 0 THEN
  <do stuff>
END IF;
  • Est-ce votre première requête destinée à avoir SELECT COUNT(1) plutôt que de SÉLECTIONNER 1?
  • SÉLECTIONNEZ l'option 1 (j'.e sélectionnez une valeur constante pour toutes les lignes retournées plutôt que de compter le nombre de lignes)
InformationsquelleAutor darreljnz | 2009-07-07