bjour,

Voici mon problème.
J'ai une requête assez importante (encore que) qui va tapper dans une base oracle.
Lorsque j'exécute cette reqête via un outils tel que sql+, celle ci met pas plus de 5 secondes pour s'éxécuter, mais via l'asp, cela peut aller parfois à plus de 50 secondes !!!

Voici cette requête:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
otSql="select oti.oidresponsable,oti.oiduser,otr.oidobjectrelation site,oti.omdescription,oto.otmodel,oto.oidobject,oto.otinternalnumber,oto.otstatus,oto.oddateentry from otobject oto,otincident oti, otobjectrelation otr"
otSql=otSql &" where " & ressource &" oti.oidobject=oto.oidobject " & etat & " and oto.oidobject=otr.oidobject"
otSql=otSql & " and otr.oidobjecttype=3004 " & site & " and otr.oidobjectRelationtype=201 and oto.oidobjecttype='3004' " & user
 
'un petit rajout de dernière minute, refaire la requête pour plus de rapidité
otSql=OtSql & " and oto.oidobject NOT IN (select ot.oidobject from otobject ot,otobject otob"
otSql=otSql & " where otob.oidobjecttype=3004 and ot.oidobjecttype=3004 and otob.oidobject=ot.oidobjectfather)"
 
'otSql=otSql & " order by oto.oidobject DESC"
 
'response.write otSql
 
set oRec=oPam.ogbAdoData.Execute(otsql)
 
 
response.write oRec.RecordCount & " résultats trouvés"
 
if (oRec.EOF and oRec.BOF) then
 
 
 response.write "<tr><td colspan=7 align=center>Aucun résultat ne correspond à votre requête</td></tr>"
 
 else
 
while NOT oRec.EOF
 
	'on récupère la ressource
 
	otSqlressource="select otmodel from otobject where oidobject='"& oRec("oidresponsable") &"' "
	set oRecressource=oPam.ogbAdoData.Execute(otsqlressource)
 
	'on récupère le user
 
	otSqluser="select otmodel from otobject where oidobject='"& oRec("oiduser") &"' "
	set oRecuser=oPam.ogbAdoData.Execute(otsqluser)
 
	'on récupère le site
 
	otSqlsite="select otmodel from otobject where oidobject='"& oRec("site") &"' "
	set oRecsite=oPam.ogbAdoData.Execute(otsqlsite)
 
 
 
response.write "<font face=verdana size=2><tr><td><a href=../Encours/detail.asp?oidobject=" & oRec("oidobject") & "&oiduser="& orec("oiduser") &" target=_blank>"& oRec("otinternalnumber") &"</a></td><td>" & orec("otmodel") &"</td><td>"& orecuser("otmodel") &"</td><td>" & orec("otstatus") & "</td><td>"& orecsite("otmodel") &"</td><td>" & oRecressource("otmodel") &"</td><td>" & orec("oddateentry") &"</td></tr></font>"
 
 
 oRec.Movenext
 
 Wend
 
end if
Je sais qu'on peut largement l'optimiser, j'en suis très conscient, je le ferais pas la suite. Mais j'aimerais comprendre les raisons qui donnent ces différences de temps !
Pour aller tapper ds la BD oracle, j'utilise le lien odbc oracle 9.2

j'ai essayé de virer les différentes boucles, afin de ne laisser que:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
otSql="select oti.oidresponsable,oti.oiduser,otr.oidobjectrelation site,oti.omdescription,oto.otmodel,oto.oidobject,oto.otinternalnumber,oto.otstatus,oto.oddateentry from otobject oto,otincident oti, otobjectrelation otr"
otSql=otSql &" where " & ressource &" oti.oidobject=oto.oidobject " & etat & " and oto.oidobject=otr.oidobject"
otSql=otSql & " and otr.oidobjecttype=3004 " & site & " and otr.oidobjectRelationtype=201 and oto.oidobjecttype='3004' " & user
 
'un petit rajout de dernière minute, refaire la requête pour plus de rapidité
otSql=OtSql & " and oto.oidobject NOT IN (select ot.oidobject from otobject ot,otobject otob"
otSql=otSql & " where otob.oidobjecttype=3004 and ot.oidobjecttype=3004 and otob.oidobject=ot.oidobjectfather)"
 
set oRec=oPam.ogbAdoData.Execute(otsql)
mais le temps d'éxécution est sensiblement le même....

Help !! Je ne comprend pas !

merci d'avance, de votre aide !