Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Forms
Forms Forum d'entraide sur Oracle Forms
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/01/2007, 17h02   #1
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
Par défaut [10gR1] équivalence de 2 constructions dynamique de requêtes

Bonjour,

Dans un écran développé sous forms 9i, j'écris et exécute des requêtes construites dynamiquement.
Pour (me) simplifier la construction dynamique des requêtes, j'envisage de passer de la 1ère construction qui suit à la 2ème.

Voici la 1ère construction :
Code :
1
2
3
4
5
6
7
SELECT ...
FROM   A
WHERE  A.x = '...'
[...] -- filtres sucessifs par des clauses AND
AND    EXISTS ( SELECT *
                FROM   B
                WHERE  A.j = B.j )
Et la 2ème construction :
Code :
1
2
3
4
5
6
7
8
SELECT ...
FROM   A
WHERE  EXISTS ( SELECT *
                FROM   B
                WHERE  A.j = B.j
                AND    A.x = '...'
                [...] -- filtres sucessifs par des clauses AND
              )
Nous sommes d'accord avec mes collègues pour dire que ces 2 constructions retournent les mêmes données (même nombre de lignes et lignes identiques) mais une de mes collègues prétend que dans la 2ème construction s'il existe un index sur la colonne x alors il ne sera pas utilisé contrairement à la 1ère construction.

J'aimerais donc savoir si les résultats seront les mêmes :
- en terme contenu (même nombre lignes retournées et lignes identiques)
- en terme de performances
__________________
Modérateur des forums Oracle et Langage SQL
Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2007, 17h17   #2
Membre Expert
 
Inscription : avril 2006
Messages : 1 024
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 024
Points : 1 175
Points : 1 175
Sur le principe, je serais assez d'accord avec ta collegue, la premiere construction semble plus naturelle. sur la 2ieme c'est un peu bizarre de mettre un filtre concertant la table A dans le bloc concernant la table B... cependant je crois qu'oracle doit faire l'équivalence, pour en avoir le coeur net, une seule chose à faire: editer le plan d'exécution
remi4444 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2007, 17h25   #3
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
Citation:
Envoyé par remi4444
cependant je crois qu'oracle doit faire l'équivalence, pour en avoir le coeur net, une seule chose à faire: editer le plan d'exécution
Hello Rémi,

Je suis d'accord et je pourrais faire le test mais un exemple n'est pas une preuve.
Donc ce n'est pas parce qu'en choisissant certaines clauses AND qui filtreraient mes données et en constatant que les plans d'exécution sont identiques sur cet exemple que je pourrais en déduire que c'est le cas pour toute conversion de la 1ère construction vers la 2ème.

Enfin, ce que ma collègue dit, c'est que dans le 2ème cas, s'il existe un index sur la colonne X alors :
- il sera utilisé dans la 1ère construction
- il NE sera PAS utilisé dans la 2ème construction
ça par contre je peux le tester...
__________________
Modérateur des forums Oracle et Langage SQL
Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h19.


 
 
 
 
Partenaires

Hébergement Web