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

Bases de données Delphi Discussion :

Delphi, Firebird, et requetes longues ...


Sujet :

Bases de données Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Delphi, Firebird, et requetes longues ...
    Bonjour,
    J'ai actuellement des petits problèmes de SQL ... hehe
    Si quelqu'un savait ... ce serait cool ...

    Voila :
    3 bases : donnees, TableData et entreprises :


    Code : 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
    CREATE TABLE "DONNEES"
    (
      "ID" VARCHAR(15) NOT NULL,
      "NOM" VARCHAR(150),
      "CODEPOSTAL" VARCHAR(5),
      "VILLE" VARCHAR(150),
      "ANNEE" INTEGER NOT NULL,
      "CONSOL" INTEGER DEFAULT 0 NOT NULL,
     PRIMARY KEY ("ID", "ANNEE", "CONSOL")
    );
     
    CREATE TABLE "ENTREPRISES"
    (
      "ID" CHAR(16) NOT NULL,
      "ANNEE" NUMERIC(4, 0) NOT NULL,
     
        tout plein de valeurs (x70)
     
      "CONSOL" INTEGER DEFAULT 0 NOT NULL,
     PRIMARY KEY ("ID", "ANNEE", "CONSOL")
    );
     
     
    CREATE TABLE "TABLEDATA"
    (
      "ID" VARCHAR(15) NOT NULL,
        "NB" NUMERIC(18, 4),
        tout plein de valeurs (x>100)
      "..."  NUMERIC(18, 4),
     
      "ANNEE" INTEGER NOT NULL,
     PRIMARY KEY ("ID", "CONSOL", "ANNEE")
    );


    Quand je fais ces requêtes, ca fonctionne nickel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT TableData.{FIELD1, FIELD2, ...}, donnees.{FIELD1, FIELD2, ...},
    entreprises.{...}
    FROM donnees
    INNER JOIN TableData ON TableData."ID" = donnees."ID" AND TableData."CONSOL"
    = donnees."CONSOL"
     LEFT JOIN entreprises ON TableData."ID" = entreprises."ID" AND
    TableData."CONSOL" = entreprises."CONSOL" AND TableData."ANNEE"
    =entreprises."ANNEE"
    WHERE (( ( TableData."CONSOL" = '0')) AND (TableData."ANNEE"= '2002'));

    Par contre, quand je fais les requêtes suivantes, cela mets trois ans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT TableData.{FIELD1, FIELD2, ...}, donnees.{FIELD1, FIELD2, ...},
    entreprises.{...}
    FROM donnees
    INNER JOIN TableData ON TableData."ID" = donnees."ID" AND TableData."CONSOL"
    = donnees."CONSOL"
    LEFT JOIN entreprises ON TableData."ID" = entreprises."ID" AND
    TableData."CONSOL" = entreprises."CONSOL" AND TableData."ANNEE"
    =entreprises."ANNEE"
    WHERE (( ( TableData."CONSOL" = '0') AND  ( donnees."CODEPOSTAL" LIKE '45%')
    AND  ( entreprises."COL5" >= '0.2') AND ( ( TableData."NB" >= '50000000')
    AND  ( TableData."NB" <= '150000000'))) AND (TableData."ANNEE"= '2002'));
    Qeulqu'un aurait une solution ?
    S'il vous plait !


    [Balise code ajoutée par King Kaiser]

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Je mettrai les conditions de la table entreprise et tabledata dans la condition de jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT B.FIELD1, B.FIELD2, ..., A.FIELD1, A.FIELD2, ..., 
    C.{...} 
    FROM donnees A
    INNER JOIN TableData B ON B.ID = A.ID AND B.CONSOL  and B.CONSOL = A.CONSOL  AND    B.NB >= '50000000' AND   B.NB <= '150000000' AND B.ANNEE= '2002'
    LEFT JOIN entreprises C ON B.ID = C.ID AND 
    B.CONSOL = C.CONSOL AND B.ANNEE =C.ANNEE AND   C.COL5>= '0.2'  
    WHERE (A.CODEPOSTAL LIKE '45%') and (A.CONSOL=0)
    ;

  3. #3
    Membre régulier
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 101
    Points : 122
    Points
    122
    Par défaut
    Moi, je ferais débuter ma clause WHERE par les conditions sur les champs indexés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT TableData.{FIELD1, FIELD2, ...}, donnees.{FIELD1, FIELD2, ...}, 
    entreprises.{...} 
    FROM donnees 
    INNER JOIN TableData ON TableData."ID" = donnees."ID" AND TableData."CONSOL" 
    = donnees."CONSOL" 
    LEFT JOIN entreprises ON TableData."ID" = entreprises."ID" AND 
    TableData."CONSOL" = entreprises."CONSOL" AND TableData."ANNEE" 
    =entreprises."ANNEE" 
    WHERE (( ( TableData."CONSOL" = '0') AND  (TableData."ANNEE"= '2002') 
    AND  ( entreprises."COL5" >= '0.2') AND ( ( TableData."NB" >= '50000000') 
    AND  ( TableData."NB" <= '150000000'))) AND ( donnees."CODEPOSTAL" LIKE '45%'));
    En l'occurence, mettre les conditions sur CONSOL et ANNEE en premier...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Je mettrai les conditions de la table entreprise et tabledata dans la condition de jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT B.FIELD1, B.FIELD2, ..., A.FIELD1, A.FIELD2, ..., 
    C.{...} 
    FROM donnees A
    INNER JOIN TableData B ON B.ID = A.ID AND B.CONSOL  and B.CONSOL = A.CONSOL  AND    B.NB >= '50000000' AND   B.NB <= '150000000' AND B.ANNEE= '2002'
    LEFT JOIN entreprises C ON B.ID = C.ID AND 
    B.CONSOL = C.CONSOL AND B.ANNEE =C.ANNEE AND   C.COL5>= '0.2'  
    WHERE (A.CODEPOSTAL LIKE '45%') and (A.CONSOL=0)
    ;

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Je mettrai les conditions de la table entreprise et tabledata dans la condition de jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT B.FIELD1, B.FIELD2, ..., A.FIELD1, A.FIELD2, ..., 
    C.{...} 
    FROM donnees A
    INNER JOIN TableData B ON B.ID = A.ID AND B.CONSOL  and B.CONSOL = A.CONSOL  AND    B.NB >= '50000000' AND   B.NB <= '150000000' AND B.ANNEE= '2002'
    LEFT JOIN entreprises C ON B.ID = C.ID AND 
    B.CONSOL = C.CONSOL AND B.ANNEE =C.ANNEE AND   C.COL5>= '0.2'  
    WHERE (A.CODEPOSTAL LIKE '45%') and (A.CONSOL=0)
    ;

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci les gen !

Discussions similaires

  1. Delphi, Firebird et Vista
    Par obione dans le forum Bases de données
    Réponses: 1
    Dernier message: 23/09/2006, 18h02
  2. DELPHI ORACLE et REQUETES OUVERTES
    Par klingc dans le forum Bases de données
    Réponses: 3
    Dernier message: 21/06/2005, 13h51
  3. [ORACLE][SQL] procedure sous delphi avec une requete SQL
    Par nivet dans le forum Bases de données
    Réponses: 2
    Dernier message: 17/11/2004, 13h43
  4. Delphi, Firebird, et lenteurs
    Par shikami dans le forum SQL
    Réponses: 2
    Dernier message: 22/09/2004, 18h08
  5. delphi 8 et requetes
    Par menillet dans le forum Bases de données
    Réponses: 2
    Dernier message: 15/04/2004, 21h36

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