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 :

Delphi, Firebird, et lenteurs


Sujet :

SQL Firebird

  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 lenteurs
    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 !
    Edité par Barbibulle : Ajout des balises [ code ] et [ /code ]

  2. #2
    Membre actif Avatar de TMuet
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2003
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 225
    Points : 288
    Points
    288
    Par défaut
    Les champs de la clause WHERE ne possèdent pas d'index ?
    Si les tables sont grosses, cela pourrait aider

  3. #3
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    C'est tout à fait normal.

    La 1ere requete se base sur les index créés par les clés primaire.

    Alors que pour la seconde requete vous l'obligez à regarder toutes les valeurs de vos tables jointes...

    En plus vous utilisez le prédicat LIKE qui est un des plus gourmand en resource UC.(mais bon ce n'est pas le plus gros probleme de votre requete).

    Il y a combien d'enregistrement dans chacune de vos tables ?
    Et la première requete renvoie combien de lignes ?

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. [D5][FireBird][Debutant]Lenteur requete SELECT
    Par Benj2007 dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/09/2006, 12h02
  3. Delphi et Excel : Lenteur sur un Insert
    Par defluc dans le forum Delphi
    Réponses: 1
    Dernier message: 30/05/2006, 07h49
  4. Delphi, Firebird, et requetes longues ...
    Par shikami dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/09/2004, 19h04

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