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

SQL Firebird Discussion :

Optimisation de base ou de requete


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 717
    Par défaut Optimisation de base ou de requete
    bonjour a tous
    voici la requete que j'utilise pour reperer les doublons de ma base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT DISTINCT *
    FROM   MESINFORMATIONS T1
    WHERE  EXISTS (SELECT *
                   FROM   MESINFORMATIONS T2
                   WHERE  T1.lacle <> T2.lacle
                     AND  T1.champ1 = T2.champ1
                     AND  T1.champ2 = T2.champ2
                     AND  T1.champ3 = T2.champ3)
    champ1, champ2, champ3 sont des varchar(80), et ma table a 40163 lignes et 20 colone ,
    mon soucis c'est que quand je lance la requete ma machine qui a 1go de ram semble ne plus marcher, j'ai attendu plus de 45 min et la j'ai tout arreté.

    es qu'il faut que je crée des index sur champ1, champ2, champ3 ?
    ou c'est la taille des donnée qui pose problème ?
    Merci pour vos éclairage

    PS : je suis sous FB 2.5 j'ai aussi fait un back restore sur la base.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut
    Ta requête semble correct

    Non, ta base de données est toute petite
    Oui tous les éléments inclus dans les clauses WHERE doivent être indexés

    Remplaces le * par les colonnes à afficher (Pas dans la clause EXISTS, là tu peux mettre 1 -éventuellement-).


    Test l’exécution de la requête de la clause existe (avec et sans index)


    jettes un petit coup d'œil à la FAQ, au cas où cela te suffise

    ou même plutôt cela qui serait sans doute plus rapide.


    Petit rajout : et pourquoi pas ne pas ajouter des contraintes d'unicité sur tes colonnes, cela éviterait de générer des doublons

  3. #3
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 717
    Par défaut
    effectivement dans la faq ce code passe propre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select champ1, champ2, champ3 , count(*)
    from t1
    group by champ1, champ2, champ3 
    having count(*) > 1;
    moins de 1s
    Ensuite pour ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DELETE FROM MESINFORMATIONS T1
    WHERE EXISTS (
    SELECT 1 FROM MESINFORMATIONS T2 
    WHERE t1.champ1 = t2.champ1 and t1.champ2 = t2.champ2 
    and t1.champ3=t2.champ3
      AND t2.RDB$DB_KEY > t1.RDB$DB_KEY );
    ici aussi ça ram grave !
    je pense que vais commencer par indexer mes champs et ensuite relancer les requetes

    Question de comprehension es que la 2eme reqête supprime exactement ce definit dans la première ?

    merci

  4. #4
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 717
    Par défaut
    En créant un index pour chacun de mes champs je viens resoudre le problème de lenteur merci beaucoup !

    mais j'ai encore un autre soucis c'est au niveau de la comprehension de ces deux requête, dont voici les codes
    en faite je recherche des doublons (sur le champ1, champ2 et champ3)

    Requête 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT DISTINCT *
    FROM   MESINFORMATIONS T1
    WHERE  EXISTS (SELECT *
                   FROM   MESINFORMATIONS T2
                   WHERE  T1.lacle <> T2.lacle
                     AND  T1.champ1 = T2.champ1
                     AND  T1.champ2 = T2.champ2
                     AND  T1.champ3 = T2.champ3)
    Resultat : 2977


    Requête 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select champ1, champ2, champ3, count(*)
    from MESINFORMATIONS
    group by champ1, champ2, champ3
    having count(*) > 1;

    Resultat : 1481

    la je suis tout confu ! j'ai vraiment besion d'aide la !
    merci

  5. #5
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 717
    Par défaut
    Après des test je pense avoir compris lorsque j'ai mis mes champs dans la close select je me suis retrouver avec les mêmes resultats pour les deux requêtes mais quand je laisse * la c'est differents.
    Bon dans tous les cas je suis toujours ouvert a d'autres explications.
    Merci a tous

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

Discussions similaires

  1. Utiliser deux bases dans une requete, possible ?
    Par compu dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/02/2006, 14h09
  2. Réponses: 9
    Dernier message: 30/01/2006, 08h42
  3. Optimisation grosse base
    Par druidus dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 14/06/2005, 12h40
  4. [OPTIMISATION] [UNION] Union dans une requete
    Par nico44 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/03/2005, 12h47
  5. Sortir un fichier csv sur base d une requete
    Par Freeman_80 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 12/01/2005, 11h21

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