Nous sommes actuellement le 01 Juil 2026, 05:06

Le fuseau horaire est UTC-5 heures [Heure d’été]




Publier un nouveau sujet Répondre au sujet  [ 6 message(s) ] 
Auteur Message
MessagePublié: 22 Oct 2007, 17:26 
Hors-ligne
Occasionnel
Occasionnel
Avatar de l’utilisateur

Inscription : 17 Août 2002, 09:24
Message(s) : 200
Wow ! beaucoup plus efficace le forum.

Présentement je fabrique un site qui demande énormément de ressource à la base de données .MDB. Mon site est fait tout .ASP.

Le problème est qu'il est très long à loader. Je dois impérativement trouver une façon de le rendre plus rapide. Je sais que le problème vient surement des requêtes SQL. Je vous montre un bout de code: je suis novice:

Code :
<table width="100%" border="0" cellpadding="1" cellspacing="1" class="table1">
  <tr>
    <td width="20" align="center" valign="top" class="textetitre">&nbsp;</td>
    <td align="left" valign="middle" class="textetitre">&nbsp;Surnom</td>
    <td align="left" valign="middle" class="textetitre">&nbsp;Ville</td>
    <td align="left" valign="middle" class="textetitre">&nbsp;Agence</td>
    <td width="56" align="center" valign="middle" class="textetitre">&nbsp;Nb.Vote</td>
    <td width="130" align="left" valign="middle" class="textetitre">&nbsp;&nbsp;&nbsp;&nbsp;Cote</td>
  </tr>
<!--item -->
<%
   if Request.Querystring("iville")=0 then
      sql66="SELECT tbl_Escorte.* FROM tbl_Escorte ORDER BY tbl_Escorte.Cote DESC;"
   else
      sql66="SELECT tbl_Escorte.* FROM tbl_Escorte WHERE tbl_Escorte.ID_Ville="& Request.Querystring("iville") &" ORDER BY tbl_Escorte.Cote DESC;"

   end if
      Set objConn66= Server.CreateObject("ADODB.Connection")
      Set objRec66= Server.CreateObject("ADODB.Recordset")
      objConn66.Open strConnect
       objRec66.Open sql66, objConn66,0,1,1
%>

<% While Not objRec66.EOF %>
<%
      sql3="SELECT tbl_Escorte.* FROM tbl_Escorte WHERE tbl_Escorte.ID_Escorte="& ObjRec66("ID_Escorte") &";"
      Set objConn3= Server.CreateObject("ADODB.Connection")
      Set objRec3= Server.CreateObject("ADODB.Recordset")
      objConn3.Open strConnect
       objRec3.Open sql3, objConn3,0,1,1

      sql4="SELECT tbl_Ville.* FROM tbl_Ville WHERE tbl_Ville.ID_Ville="& ObjRec3("ID_Ville") &";"
      Set objConn4= Server.CreateObject("ADODB.Connection")
      Set objRec4= Server.CreateObject("ADODB.Recordset")
      objConn4.Open strConnect
       objRec4.Open sql4, objConn4,0,1,1
dim diagence
if Objrec3("ID_Agence")=0 then
diagence=""
else
      sql5="SELECT tbl_Agence.* FROM tbl_Agence WHERE tbl_Agence.ID_Agence="& ObjRec3("ID_Agence") &";"
      Set objConn5= Server.CreateObject("ADODB.Connection")
      Set objRec5= Server.CreateObject("ADODB.Recordset")
      objConn5.Open strConnect
       objRec5.Open sql5, objConn5,0,1,1

diagence=Objrec5("Nom")
   
      objRec5.Close
      objConn5.close
      Set objRec5=nothing
      Set objConn5=nothing
end if
%>   
  <tr onMouseOver="this.style.background='#FDF0C4'" onMouseOut="this.style.background='#FFFFFF'" bgcolor="#FFFFFF">
    <td align="center" valign="top">
<%if formatnumber(Objrec66("Cote"),2)*10<=50 then%><img src="images/bronze.GIF" /><%end if%>
<%if formatnumber(Objrec66("Cote"),2)*10>=51 and formatnumber(Objrec66("Cote"),2)*10<=79 then%><img src="images/silver.GIF" /><%end if%>
<%if formatnumber(Objrec66("Cote"),2)*10>79 then%><img src="images/gold.GIF" /><%end if%>
</td>
    <td  align="left" valign="middle">&nbsp;<a href="index.asp" target="_parent" title="Cliquez ici pour voir le dossier complet de <%=Objrec3("Surnom")%>"><%=Objrec3("Surnom")%></a>&nbsp;&nbsp;&nbsp;&nbsp;</td>
    <td align="left" valign="middle">&nbsp;<a href="index.asp" target="_parent" title="Cliquez ici pour la liste complète des escortes pour <%=Objrec4("Nom")%>"><%=Objrec4("Nom")%></a></td>
    <td align="left" valign="middle">&nbsp;<a href="index.asp" target="_parent" title="Cliquez ici pour voir le dossier complet de <%=diagence%>"><%=diagence%></a></td>
    <td width="56" align="center" valign="middle">&nbsp;<a href="index.asp" target="_parent" title="Cliquez ici pour voir les votes et commentaires sur <%=Objrec3("Surnom")%>"><%=Objrec3("Nb_Vote")%></a></td>
    <td align="left" valign="middle" width="130">
<table border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td align="left" width="<%=formatnumber(Objrec66("Cote"),2)*10%>" background="images/statscolor1.JPG" height="8"></td>
   <td align="left" class="textecote">&nbsp;<%=formatnumber(Objrec66("Cote"),2)%></td>
  </tr>
</table>

   </td>
  </tr>
<%   

      objRec4.Close
      objConn4.close
      Set objRec4=nothing
      Set objConn4=nothing

      objRec3.Close
      objConn3.close
      Set objRec3=nothing
      Set objConn3=nothing

          objRec66.movenext
          wend
      objRec66.Close
      objConn66.close
      Set objRec66=nothing
      Set objConn66=nothing
%>   

</table>



Explication simple: C'est une table et le <TR> est repeté à chaque entrée enrégistré dans la base de données. Lorsque j'enlève cette table, le site est très rapide.

Merci pour votre aide !


Haut
 Profil  
Répondre en citant  
MessagePublié: 22 Oct 2007, 18:39 
Hors-ligne
Régulier
Régulier
Avatar de l’utilisateur

Inscription : 26 Fév 2003, 12:18
Message(s) : 443
Combien d'enregistrement sont retournés par ta requête? S'il y a en beaucoup, peut-être devrais-tu envisager de faire du pagging afin de ne pas tout afficher en même temps. Premièrement, si ta table à beaucoup de td, ta page va être longue à télécharger et ensuite le navigateur doit la parser et l'afficher ce qui peut prendre un temps considérable dépendament de la taille du fichier.

Un truc, faire un View Source de ta page et sauvegarde là afin de voir la taille qu'elle prend. Afin d'avoir une vitesse d'affichage acceptable, celle-ci devrait être en bas de 1mo et même en bas de 500ko si possible.

_________________
Asus A7N8X Deluxe v2.0 | Athlon XP Barton 2500+@3200+ | 1024mo DDR 3200 | BFG Geforce 6600GT 128mo | Western Digital 160go 7200rpm | Maxtor 40go 7200rpm | Altec Lansing ATP4 | Samsung SyncMaster 763MB | Fan CoolerMaster Aero 7+ | Sennheiser HD212 Pro


Haut
 Profil  
Répondre en citant  
MessagePublié: 22 Oct 2007, 20:40 
Hors-ligne
Occasionnel
Occasionnel
Avatar de l’utilisateur

Inscription : 17 Août 2002, 09:24
Message(s) : 200
La taille de la page est de 38241 octets. Lorsque celle-ci a terminé de loader. Le nombre d'enrégistrement dans la table(Mdb) est de 24. Donc, c'est pas beaucoup. J'ai modifié la requete SQL de oBjrec66 pour ceci:

Code :

SQL66="SELECT TOP 10 tbl_Escorte.*, tbl_Ville.* FROM tbl_Escorte, tbl_Ville WHERE tbl_Escorte.ID_Ville=tbl_Ville.ID_Ville ORDER BY tbl_Escorte.Cote DESC;"


Bon, c'est plus rapide mais encore beaucoup trop long.


Haut
 Profil  
Répondre en citant  
MessagePublié: 24 Oct 2007, 19:52 
Hors-ligne
Fidèle
Fidèle
Avatar de l’utilisateur

Inscription : 26 Fév 2002, 20:00
Message(s) : 877
Localisation : Beauport
Je viens de regarder le code rapidement. On dirait que tu crée 3 connections à la BD pour chaque enregistrements (ce qui fait tout de même 72 connections pour 24 enregistrements). Tu devrais modifier la première requête pour qu'elle aille chercher toutes les informations nécessaires (tu connais les 'join' en sql?).

_________________

Desktop Windows XP pro | P-4e 3Ghz | 1 go ddr333 pc2700 | carte mère Asus P4P800-SE | carte video BFG GF6600GT OC 128mo | disques durs 160go WD et 60go Maxtor | Graveur DVD Sony DRU710A | Sound Blaster Audigy 2 ZS Platinium | Haut-parleurs Logitech Z-5500 | Microsoft Digital Media Pro Keyboard | Souris Logitech MX500 | écran Samsung 730B |

Portable Toshiba Satellite M-30


Haut
 Profil  
Répondre en citant  
MessagePublié: 24 Oct 2007, 20:03 
Hors-ligne
Petit nouveau
Petit nouveau

Inscription : 15 Oct 2007, 07:03
Message(s) : 1
Le plus gros problème est effectivement dans les requêtes SQL. Bien sûr, l'engin MDB n'est pas très performant, surtout pour un environnement partagé comme le Web, mais cette page devrait demander une quantité minime de ressource, surtout vu que tout est en lecture.

En gros, ton problème est dans le nombre incroyable de requêtes que tu fais à chaque chargement. Tu fais une requête au départ, puis pour chaque enregistrement, tu en fais 2-3 autres, incluant une qui est totalement redondante. Tu as déjà demandé l'information sur toutes les escortes dans ta première requête, pourquoi redemander les mêmes choses encore une fois?... donc pour seulement 24 enregistrements, tu fais près de 75 requêtes, alors qu'il serait facile de réduire ça à une requête unique! Encore pire, tu ouvres un connexion pour chaque requête, et tu gardes toutes ces connexions ouvertes jusqu'à la fin, donc tu tues la performance de tes accès...

Ta requête unique devrait ressembler à ceci :

SELECT e.*, v.*, a.* FROM tbl_Escorte e
LEFT JOIN tbl_Ville v on e.ID_Ville = v.ID_Ville
LEFT JOIN tbl_Agence a on a.ID_Agence = e.ID_Agence

avec le WHERE tbl_Escore.ID_Ville = Request.QueryString... lorsque le paramètre est là (attention aux erreurs d'injections SQL, ton code est très vulnérable). À noter que ceci est la syntaxe SQL standard, je ne connais pas les détails d'implémentation d'Access, donc la requête devra peut-être être modifiée un peu.

Je te conseille de lire un peu plus sur le SQL et les bases de données, et plus particulièrement sur les jointures (voir http://en.wikipedia.org/wiki/Join_(SQL) en anglais, dans ton cas les left outer join)


Haut
 Profil  
Répondre en citant  
MessagePublié: 25 Oct 2007, 21:36 
Hors-ligne
Occasionnel
Occasionnel
Avatar de l’utilisateur

Inscription : 17 Août 2002, 09:24
Message(s) : 200
Merci bcp... je vais lire un peu plus en effet sur les requête SQL. Je suis un peu novice, donc ca risque d'etre long.

Je vous reviens la dessus !


Haut
 Profil  
Répondre en citant  
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 6 message(s) ] 

Le fuseau horaire est UTC-5 heures [Heure d’été]


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 0 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum

Recherche de:
Aller vers :  
cron
Propulsé par phpBB® Forum Software © phpBB Group
Traduction et support en françaisHébergement de site