Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
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 09/08/2011, 11h44   #1
Membre du Club
 
Homme Seb
Inscription : février 2008
Messages : 130
Détails du profil
Informations personnelles :
Nom : Homme Seb
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 130
Points : 40
Points : 40
Par défaut Requete creation de table, execution horriblement longue

Bonjour,

J'ai créé une requete qui rammene entre 6 000 et 7 000 lignes et je veux basculer les données dans une table.

Lors de l'execution de la requete, la creation de la table met plus de 4 heures

Je sais que je suis sur serveur au boulot, mais l'affichage des resultats met que quelques secondes.

Pourquoi la creation de la table est si longue et que puis je faire pour dimminuer considerablement ce temps ?

Voici mon code SQL:
Code :
1
2
3
SELECT dbo_Carb_Mvt_ST5_ST6.Code_Site, dbo_Carb_Mvt_ST5_ST6.Date_Mvt, dbo_ENGIN_VUE.CodeEngin, dbo_Carb_Mvt_ST5_ST6.Type_Perception, dbo_Carb_Mvt_ST5_ST6.Origine_Carb, dbo_Carb_Mvt_ST5_ST6.Type_Carb, dbo_Carb_Mvt_ST5_ST6.Volume_Carb, dbo_Carb_Mvt_ST5_ST6.Potentiel_Kmjour, IIf(DLast("Date_Mvt","dbo_Carb_Mvt_ST5_ST6","[Codeident]=" & [Codeident] & " And [Date_Mvt] < " & Format([Date_Mvt],"\#mm\/dd\/yyyy\#"))<=[chgt_comptKM] And [Date_Mvt]>=[chgt_comptKM],"chgt compteur",DLast("Potentiel_Kmjour","dbo_Carb_Mvt_ST5_ST6","[Codeident]=" & [Codeident] & " And [Date_Mvt] < " & Format([Date_Mvt],"\#mm\/dd\/yyyy\#"))) AS Ancien_Potentiel_Km, IIf([Ancien_Potentiel_Km]="chgt compteur",0,[Potentiel_Kmjour]-[Ancien_Potentiel_Km]) AS parcouru, IIf([parcouru]>0,([dbo_Carb_Mvt_ST5_ST6]![Volume_Carb]*100)/[parcouru],0) AS Conso_au_100km, dbo_Carb_Mvt_ST5_ST6.Potentiel_Hjour, IIf(DLast("Date_Mvt","dbo_Carb_Mvt_ST5_ST6","[Codeident]=" & [Codeident] & " And [Date_Mvt] < " & Format([Date_Mvt],"\#mm\/dd\/yyyy\#"))<=[chgt_comptHM] And [Date_Mvt]>=[chgt_comptHM],"chgt compteur",DLast("Potentiel_Hjour","dbo_Carb_Mvt_ST5_ST6","[Codeident]=" & [Codeident] & " And [Date_Mvt] < " & Format([Date_Mvt],"\#mm\/dd\/yyyy\#"))) AS Ancien_Potentiel_moteur, IIf([Ancien_Potentiel_moteur]="chgt compteur",0,[Potentiel_Hjour]-[Ancien_Potentiel_moteur]) AS Nb_heures_moteur, IIf([Nb_heures_moteur]>0,([dbo_Carb_Mvt_ST5_ST6]![Volume_Carb]*1)/[Nb_heures_moteur],0) AS Conso_litre_heure_mot, dbo_Carb_Mvt_ST5_ST6.Potentiel_Hequipement, IIf(DLast("Date_Mvt","dbo_Carb_Mvt_ST5_ST6","[Codeident]=" & [Codeident] & " And [Date_Mvt] < " & Format([Date_Mvt],"\#mm\/dd\/yyyy\#"))<=[chgt_comptHE] And [Date_Mvt]>=[chgt_comptHE],"chgt compteur",DLast("Potentiel_Hequipement","dbo_Carb_Mvt_ST5_ST6","[Codeident]=" & [Codeident] & " And [Date_Mvt] < " & Format([Date_Mvt],"\#mm\/dd\/yyyy\#"))) AS Ancien_Potentiel_equipement, IIf([Nb_heures_equipement]>0,([dbo_Carb_Mvt_ST5_ST6]![Volume_Carb]*1)/[Nb_heures_equipement],0) AS Conso_litre_heure_equi, IIf([Ancien_Potentiel_equipement]="chgt compteur",0,[Potentiel_Hequipement]-[Ancien_Potentiel_equipement]) AS Nb_heures_equipement, dbo_Carb_Mvt_ST5_ST6.Commentaires, Format([date_chgt_ComptKM],"dd/mm/yyyy") AS chgt_comptKM, Format([date_chgt_ComptHM],"dd/mm/yyyy") AS chgt_comptHM, Format([date_chgt_ComptHE],"dd/mm/yyyy") AS chgt_comptHE, dbo_Carb_Mvt_ST5_ST6.Codeident INTO consommation
FROM (dbo_Carb_Mvt_ST5_ST6 INNER JOIN dbo_ENGIN_VUE ON dbo_Carb_Mvt_ST5_ST6.Codeident = dbo_ENGIN_VUE.CodeIdentite) LEFT JOIN Req_chgt_compt_2011 ON dbo_ENGIN_VUE.CodeEngin = Req_chgt_compt_2011.CodeEngin
WHERE (((Year([Date_Mvt]))=Year(Now())) AND ((Month([Date_Mvt]))>=([]-1) And (Month([Date_Mvt]))<([]+1)));
Ma requete sert a recuperer et a calculer la conso au 100 km ou à l'heure, je mets toutes les données dans la table, puis je fais une autre requete pour comparer la conso à l'instant T avec celle d'avant.

Merci pour votre aide.

Seb
sebing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 19h46   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 470
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 470
Points : 7 552
Points : 7 552
À l'oeil je soupsconne les DLast().

Voit si tu peux les remplacer par des requêtes ou si tu peux passer par une table temporaire qui enregistrera le DLast().

Autre test avant de tout casser : ouvrir ta requête qui te donne les résultats instantané et sauter directement au dernier enrgistrement ... pour voir le temps que cela prend.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/09/2011, 18h55   #3
Membre du Club
 
Homme Seb
Inscription : février 2008
Messages : 130
Détails du profil
Informations personnelles :
Nom : Homme Seb
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 130
Points : 40
Points : 40
Citation:
Envoyé par marot_r Voir le message
À l'oeil je soupsconne les DLast().

Voit si tu peux les remplacer par des requêtes ou si tu peux passer par une table temporaire qui enregistrera le DLast().

Autre test avant de tout casser : ouvrir ta requête qui te donne les résultats instantané et sauter directement au dernier enrgistrement ... pour voir le temps que cela prend.

A+
Bonjour,

Désolé de vous répondre si tardivement mais je n'ai pas pu me remettre sur ce dossier avant ce jour.

en effet c'est la faute au Dlast car quant je veux voir le dernier enregistrement, c'est long aussi.

Je vais voir pour trouver une solution.

Merci encore et désolé du retard

Seb
sebing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 19h33   #4
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 470
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 470
Points : 7 552
Points : 7 552
Un truc qui ne m'avait pas frappé mais Dlast() te donnes le dernier enregistrement dans la table dans l'ordre où Access a décidé de les stocker. Si tu veux le dernier enregistrement selon un critère précis (ex la dernière date) il faut utiliser DMax().

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h09.


 
 
 
 
Partenaires

Hébergement Web