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

Requêtes et SQL. Discussion :

Requête suppression de lignes avec champ vide et soucis de performance [Toutes versions]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 96
    Points : 47
    Points
    47
    Par défaut Requête suppression de lignes avec champ vide et soucis de performance
    Bonjour à tous,

    Je rencontre actuellement de gros soucis de performances avec ma base Access pour une table contenant plus de 200000 entrées.
    Le but de cette requête, qui fonctionnait parfaitement jusqu'à présent, consiste à supprimer les lignes de la fameuse table contenant des champs vides (e.g. sans données) dans le but de permettre des traitements ultérieurs.
    1) Dois-je améliorer/optimiser le code de la requête ? ou
    2) Dois-je passe par une macro VBA pour gagner en efficacité/temps d'exécution ?

    Merci pour votre aide,
    Dagada75

    Code de la requête

    SELECT AGR_1251_Y_MERGE.UNAME, AGR_1251_Y_MERGE.AGR_NAME, AGR_1251_Y_MERGE.OBJECT, AGR_1251_Y_MERGE.FIELD, AGR_1251_Y_MERGE.LOW INTO AGR_1251_Y_MERGE_finale
    FROM AGR_1251_Y_MERGE
    WHERE (((Exists (select * from AGR_1251_Y_MERGE b where b.AGR_NAME=AGR_1251_Y_MERGE.AGR_NAME and b.OBJECT=AGR_1251_Y_MERGE.OBJECT and isnull(b.LOW)))=False));

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 578
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 578
    Points : 43 500
    Points
    43 500
    Par défaut
    A mon avis plutôt optimiser la requête. Peut-être indexer.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 96
    Points : 47
    Points
    47
    Par défaut
    On en restera donc là.
    L'indexation ne change rien .. 2h30 d'exécution.
    Au moins ca marche

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 676
    Points : 57 103
    Points
    57 103
    Billets dans le blog
    40
    Par défaut
    Salut dagada75,

    Peut-être une piste car en principe un,
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT  g.*
    FROM    tablegauche g
    WHERE   NOT EXISTS
    (
      SELECT  *
      FROM    tabledroite d
      WHERE   d.champ = g.champ
    )

    est équivalent à :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT  g.*
    FROM    tablegauche g LEFT JOIN tabledroite d
    ON      g.champ = d.champ
    WHERE   d.champ IS NULL

    par contre, pas sûr qu'un LEFT JOIN...IS NULL soit plus efficace qu'un EXISTS=false

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 96
    Points : 47
    Points
    47
    Par défaut
    Salut F-Leb

    Tu as surement du reconnaître ton code

    J'ai en fait essayé une alternative ... mais le résultat me laisse perplexe.

    Pour la petite histoire, dans mon scénario 1 (avec ta requête et mes problèmes de performance), je disposai d'une table_0 qui contenait des champs vides en dernière colonne. Je voulais alors supprimer les lignes contenant ces champs vides, à l'aide de ta query, pour créer une nouvelle table_1. Je faisais ensuite une union avec une table contenant certaines valeurs pour obtenir au final une table_3.

    Dans mon scénario 2 alternatif, j'ai résonné de la manière suivante:
    -Je pars toujours de ma table_0 (avec ses champs vides)
    -Je crée la requête union suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT DISTINCT [Table_0].CHAMP1, [Table_0].CHAMP2, [Table_0].CHAMP3, [Table_0].CHAMP4, [Table_0].CHAMP5
    FROM [Table_0]
    WHERE ((([Table_0].CHAMP5)<>"*")) AND ((([Table_0].CHAMP5)<>""))
    ORDER BY [Table_0].CHAMP1, [Table_0].CHAMP2, [Table_0].CHAMP3, [Table_0].CHAMP4, [Table_0].CHAMP5 UNION SELECT [Table_0].CHAMP1, [Table_0].CHAMP2, [Table_0].CHAMP3, [Table_0].CHAMP4, [star_values].Star_values
    FROM [Table_0], [star_values]
    WHERE ((([Table_0].CHAMP5)="*"))
    ORDER BY [Table_0].CHAMP1, [Table_0].CHAMP2, [Table_0].CHAMP3, [Table_0].CHAMP4, [Table_0].CHAMP5;
    - Puis je créer une dernière requête pour insérer le contenu de cette union dans une nouvelle table_1

    ALORS:
    - bonneS nouvelleS: je n'ai effectivement PLUS de champ vides dans ma nouvelle table + niveau performance ca ne prend que quelques minues
    - La chose bizarre: au final j'obtiens PLUS de valeurs avec ce scenario qu'avec le scénario 1 .... du coup je ne sais pas si cela est exploitable ..

    Any idea ?

    Dagad75

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Suppression de toutes les lignes avec cellule vide en colonne A
    Par Cyclemmanuel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/05/2012, 19h43
  2. [XL-2007] suppression de ligne si champ vide
    Par cecilebh dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/02/2011, 17h55
  3. [AC-2003] Suppression d'une ligne sur champ vide
    Par juju1988 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 28/10/2010, 14h39
  4. [AC-2007] Pb de requête avec champ vide
    Par julius26 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/01/2010, 18h33
  5. [WD-2007] Modèle Word - Suppression de ligne avec puce si vide
    Par vincent DD dans le forum Word
    Réponses: 1
    Dernier message: 26/08/2009, 22h14

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