IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Requête SQL très lente


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Mars 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2008
    Messages : 109
    Points : 69
    Points
    69
    Par défaut Requête SQL très lente
    Bonjour,
    Je suis entrain de développer une application VB.NET à l'aide de Visual Studio 2010. L'application consiste à envoyer une requête SQL à la base des données Access et récupérer le résultat pour imprimer un relevé de mesures. la base Access pourra atteindre plus que 700Mo. mon problème est que la requête de recherche consomme presque 3minute ce qui rend l'application très lente lors de l'utilisation. Je veux savoir s'il y a une solution pour diminuer le temps de recherche de la base ou s'il y a d'autres techniques pour résoudre ce problème.

    Merci d'avance

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Points : 478
    Points
    478
    Par défaut
    [troll]Il ne faut pas utiliser Access si tu veux que tes requêtes soient rapides[/troll]

    Non mais plus sérieusement si ta base est "grosse" c'est normal que tes requêtes soient longues, après il faut travailler l'optimisation de ta requête

  3. #3
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Citation Envoyé par Shadam Voir le message
    [troll]Il ne faut pas utiliser Access si tu veux que tes requêtes soient rapides[/troll]
    Pas si troll que ça... J'ai dernièrement changer un ancien programme qui fonctionnait avec une base Access bien lourde car l'application mettait 2 minutes par action... La solution à été de mettre la base Access dans une vrais base de donnée (SQL Server dans ce cas) et c'est bien plus performant.

    fishingman : Une petite question, pouvez vous mettre la requête qui met à mal le programme?

  4. #4
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Perso,

    Je considère Access comme un outil de bureautique pour des utilisateurs initiés mais absolument pas comme un outil à prendre en compte dans un développement.

    Si on veut développer une application avec une DB derrière, il y a les versions express de sql server qui sont gratuites et souvent plus que suffisantes. Pourquoi s'en priver pour un truc moins bien foutu ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    La base de données est plus là pour un réaliser de petite application avec du VBA, plutot que des developpements pouvant traiter de grosse quantité de données

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 174
    Points : 25 115
    Points
    25 115
    Par défaut
    moi aussi je déteste access mais ca doit être comme tout, mal utilisé c'est peu efficace
    sur du mono utilisateur et sur du rapatriement de données sans condition indexable je ne pense pas que ca soit énormément plus lent qu'sql server

    en tout cas même sur sql server si on fait n'importe quoi on peut se retrouver avec un truc à la ramasse ^^

    bref il nous faudrait le code pour juger ...

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2003
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2003
    Messages : 116
    Points : 146
    Points
    146
    Par défaut
    Pour avoir fait l'expérience. si tu veux vraiment garder Access comme base de données, il faut tout développer sur Access. L'accès aux requêtes et aux tables est bien plus rapide.

    Une requete qui mettait 10 sec sur Access mettait plusieurs minutes avec VB.

    Mais je rejoindrais l'avis de mes predécesseurs, je pense qu'il faut utiliser une base de données comme SQL Server.

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Mars 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2008
    Messages : 109
    Points : 69
    Points
    69
    Par défaut
    Merci pour vos réponses.
    Vous avez raison, Access ce n'est pas l'outil agréable à utiliser. Par contre je récupère mes données à partir d'un logiciel de test (TESTSTAND) qui m'oblige à utiliser Access.
    De plus la requête que j'utilise me paraît un peu compliqué:
    Code sql : 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
     SELECT 
        Mid([UUT_RESULT]![UUT_SERIAL_NUMBER],1,9) AS LOT, 
        Mid([UUT_RESULT]![UUT_SERIAL_NUMBER],10,13) AS SERIE, 
        [UUT_RESULT].[START_DATE_TIME], [UUT_RESULT].[UUT_STATUS], 
        [STEP_RESULT].[STEP_NAME], 
        [STEP_RESULT].[STATUS], 
        [MEAS_NUMERICLIMIT].[DATA], 
        [MEAS_NUMERICLIMIT].[COMP_OPERATOR], 
        [MEAS_NUMERICLIMIT].[LOW_LIMIT], 
        [MEAS_NUMERICLIMIT].[HIGH_LIMIT], 
        [MEAS_NUMERICLIMIT].[UNITS] 
    FROM UUT_RESULT 
    INNER JOIN 
        (STEP_RESULT 
         INNER JOIN MEAS_NUMERICLIMIT 
         ON [STEP_RESULT].[ID]=[MEAS_NUMERICLIMIT].[STEP_RESULT]
        ) 
    ON [UUT_RESULT].[ID]=[STEP_RESULT].[UUT_RESULT] 
    WHERE 
        ( ( Mid([UUT_RESULT]![UUT_SERIAL_NUMBER],1,9)='" + Form5.Label3.Text + "') 
        AND ( Mid([UUT_RESULT]![UUT_SERIAL_NUMBER],10,13)='" + Form5.TextBox2.Text + "') 
        AND ( Mid([UUT_RESULT]![UUT_SERIAL_NUMBER],10,4)<>'" + Nothing + "') 
        AND (([UUT_RESULT].UUT_STATUS)='Passed') 
        AND ( UUT_RESULT.START_DATE_TIME IN 
            (SELECT Last(UUT_RESULT.START_DATE_TIME) 
             FROM UUT_RESULT 
             INNER JOIN STEP_RESULT 
             ON UUT_RESULT.ID = STEP_RESULT.UUT_RESULT 
             GROUP BY Mid([UUT_RESULT]![UUT_SERIAL_NUMBER],1,9), Mid([UUT_RESULT]![UUT_SERIAL_NUMBER],10,4), UUT_RESULT.UUT_STATUS)
            ) 
        AND ((STEP_RESULT.STEP_NAME)<>'MainSequence Callback') 
        AND ((STEP_RESULT.STATUS)<>'Skipped')) 
        GROUP BY Mid([UUT_RESULT]![UUT_SERIAL_NUMBER],1,9), Mid([UUT_RESULT]![UUT_SERIAL_NUMBER],10,13), [UUT_RESULT].[START_DATE_TIME], [UUT_RESULT].[UUT_STATUS], [STEP_RESULT].[STEP_NAME], [STEP_RESULT].[STATUS], [MEAS_NUMERICLIMIT].[DATA], [MEAS_NUMERICLIMIT].[COMP_OPERATOR], [MEAS_NUMERICLIMIT].[LOW_LIMIT], [MEAS_NUMERICLIMIT].[HIGH_LIMIT], [MEAS_NUMERICLIMIT].[UNITS] 
        ORDER BY Mid([UUT_RESULT]![UUT_SERIAL_NUMBER],10,13), [UUT_RESULT].[START_DATE_TIME]

    L'exécution de cette requête dure 3 minute ou plus pour me retourner presque 100 ligne(11 colonnes) de données.
    Pour infos, cette commande dure le même temps presque si je l'exécute directement sur Access.

  9. #9
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 174
    Points : 25 115
    Points
    25 115
    Par défaut
    lol




    combien de lignes dans la table ?
    combien de lignes satisfont la condition ?
    pourquoi un + nothing au milieu ? (je précise au passage que le caractère de concaténation en vb.net est &)

    sinon la requete est lente pour plusieurs raisons, la plus flagrante étant le nombre de mid() dedans
    une base de données n'est pas faites pour faire du découpage de string, mais de la gestion de données
    si une colonne contient plusieurs infos et qu'il faut découper la colonne c'est du grand n'importe quoi

    éventuellement tu peux faire un select * from latable puis découper tout depuis ton programme ca devrait aller plus vite, surtout si tu multithread le traitement
    enfin le problème est surtout que cette base de données n'a surement pas lieu d'exister dans cet état ...

  10. #10
    Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Mars 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2008
    Messages : 109
    Points : 69
    Points
    69
    Par défaut
    Merci pour votre réponse.

    Je vous clarifie plus le problème. Dans notre société nous avons beaucoup de testeur automatique basé sur le logiciel TestStand. Puisque sa version est ancienne, il n'est pas capable d'enregistrer les données de test que sur Access. Donc la société a mis en place une configuration unique de ce logiciel sur tous les testeurs pour qu'il enregistre les données sur une base locale. La société a développé aussi des requêtes pour récupérer les données de test en se basant sur le numéro de lot et le numéro de série de produit testé. Mon travail actuel est de développer une application qui imprime ces relevés de mesure. Donc pour me faciliter la tâche j'ai utiliser les mêmes requêtes utilisés auparavant.
    Je vous joint la base de donnée vierge.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Requête sql trés longue?
    Par naturel dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/05/2008, 11h04
  2. Exécuter une requête SQL très longue
    Par coraziari_l dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 10/01/2008, 17h07
  3. Requête Access trés lente ?
    Par ghostdz dans le forum Bases de données
    Réponses: 4
    Dernier message: 03/08/2007, 08h41
  4. Réponses: 12
    Dernier message: 24/07/2007, 11h09
  5. requette sql trés lente
    Par mafilek dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/11/2006, 17h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo