requête SQL (oracle) très lente en asp, mais pas dans sql+
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:
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:
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 !