Reprise du message précédent :
C'est con ça fait 5 ans que je code du SQL et j'étais toujours emmerdé quand je devais faire ce type d'opérations.
Bon oserais-je poser une question plus compliquée (je pense)
Cette fois c'est plus pour la culture personnelle sur la manière dont Oracle analyse les requêtes
Donc ne vous prenez pas la tête dessus, j'ai un jour essayé cette requête, elle prend un temps énorme bien qu'il n'y ait qu'un miliers d'enregistrements dans la base
Citation :
select * from DMAPTree where type=1 or type=0 connect by parentid = PRIOR ID start with id in ((select origindataid from dtree where dataid in (select id from dmaptree where type='0' connect by prior id=parentid start with id=1000))
union (select id as origindataid from dmaptree where id=1000)) order by name
|
Alors que d'exécuter
Citation :
((select origindataid from dtree where dataid in (select id from dmaptree where type='0' connect by prior id=parentid start with id=1000))
union (select id as origindataid from dmaptree where id=1000))
|
Puis d'exécuter
Citation :
select * from DMAPTree where type=1 or type=0 connect by parentid = PRIOR ID start with id in (1,2,3,4) order by name
|
Est d'une vitesse normale.
Ce qui signifie qu'Oracle ne commence pas par exécuter la sous-requête puis réinjecter le résultat dans la requête principale. Du coup il doit y avoir moyen de l'optimiser, mais là je ne sais plus comment puisque ma logique de calcul d'Oracle n'est pas pareil que la mienne
---------------
Ne vous mariez qu'une fois dans votre vie tellement c'est galère © randolfinette | Quand l'antre grogne, le diable cogne... | Un problème d'acquisition VHS?