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 :

Grosse différence de temps d'éxécution avec vue


Sujet :

SQL Firebird

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Points : 70
    Points
    70
    Par défaut Grosse différence de temps d'éxécution avec vue
    Bonjour,

    Voilà, j'ai créer une vue pour simplifier mes requêtes, mais je m'aperçois que la requête qui utilise la vue met beaucoup plus de temps (de quelques ms pour la requête sans vue à plusieurs secondes pour la requête avec vue).

    Dans les tables utilisées pour créer la vue, j'ai créer des index. D'après l'analyseur de performance (j'utilise EMS), une des tables n'utilise pas les index (alors que la requête sans vue indique l'utilisation des index)

    D'après vous vers quoi dois-je orienter mes recherches pour améliorer les performances ?

    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Points : 70
    Points
    70
    Par défaut
    Bon ma question ne semble inspirer personne, je vais la reformuler.

    (Sous Firebird 2.5) A partir d'une requête SQL qui répond rapidement, sur laquelle j'ai une jointure que j'utilise régulièrement sur d'autres requêtes. Je me suis dis que je vais créer une vue pour simplifier mes autres requêtes.

    Mais je me suis rendu compte que les performances en utilisant cette vue sont fortement dégradées. Je passe de quelques millisecondes à plusieurs secondes.

    Normalement mes index sur la tables d'origines sont bons. Je n'arrive pas à comprendre pourquoi une telle dégradation. Soit je passe à côté de quelque chose, soit c'est firebird qui gère mal les vues.

    J'aurai aimé avoir des retours de personnes ayant rencontré le même problème et voir comment il a été résolu ou pas.

  3. #3
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par r038tmp5 Voir le message
    D'après vous vers quoi dois-je orienter mes recherches pour améliorer les performances ?
    Sans votre 2° message, je vous aurais demandé la version de FB, sachant qu'antérieurement l'optimiseur de requêtes préparait mal le schéma d'exécution (cf. http://www.firebirdfaq.org/faq276/).
    Une piste est d'essayer de transformer la requête non pas en vue mais en procédure sélectionnable...
    Philippe.

  4. #4
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    pour répondre à ça il faut avoir les requêtes et les plans, impossible de répondre dans le vide
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    Je ferai un essai avec une procédure stockée.
    Mais j'aurai comprendre le pourquoi et éventuellement corrigé ma façon de faire avec les vue pour le pas avoir de telle augmentation du temps de réponse

  6. #6
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Bonjour !
    mieux serait de poster les deux codes requête simple et vue.
    Pour ma part je vois pas pourquoi y'aurait dégradation ! j'ai passé des dizaines de requêtes en vues puis en PS sans aucune perte de temps. Mieux encore, j'ai fais appel à une dizaine de PS dans une autre PS avec des conditions d'exécution sur une quarantaine de tables et le temps d'exécution était toujours moins d'une seconde !!

    donc, sans code c'est très difficile de se prononcer.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Points : 70
    Points
    70
    Par défaut
    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
     
    CREATE TABLE table1 (
      ID                    INTEGER NOT NULL,
      LABEL_ID        INTEGER NOT NULL,
      ...
    );
    ALTER TABLE table1 ADD CONSTRAINT pk_table1 PRIMARY KEY (ID);
     
    CREATE TABLE table2 (
      LABEL_ID        INTEGER NOT NULL,
      LANGUAGE_ID INTEGER NOT NULL,
      LABEL              VARCHAR(100)
    );
     
    ALTER TABLE table2 ADD CONSTRAINT pk_table2   PRIMARY KEY (LABEL_ID, LANGUAGE_ID);
     
    CREATE VIEW table1_view (
        ID, ..., LABEL_ID,
        LANGUAGE_ID, LABEL, SIMPLE_LABEL)
     AS
     SELECT
        T1.ID, ..., T1.LABEL_ID,
        T2.LANGUAGE_ID, 
        CASE WHEN T3.id IS NOT NULL THEN T2.label||' ('||T3.label||')' ELSE T2.label END, 
        T2.label
     FROM table1 T1
     INNER JOIN table2 T2 ON T1.LABEL_ID = T2.LABEL_ID
     LEFT JOIN table3 T3 ON T3.id = T3.table1id
    ^
    Requete qui pose problème
    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
     
    WITH S01 AS (SELECT COUNT(T4.id) AS count_value, T4.field1, T4.field2,   T4.field3
     FROM table4 T4
     INNER JOIN table1 T1 ON T4.table1_id = T1.id 
     GROUP BY ...
     HAVING COUNT(TEELEL.id) > 1)
     
    SELECT ...
     FROM S01
     INNER JOIN ...
     INNER JOIN table1 T1a ON ...  <<< utilisation table1_vue
     INNER JOIN table2 T2a ON ...
     INNER JOIN table1 T1b ON ...  << utilisation table1_vue
     INNER JOIN table2 T2b ON ...
     ORDER BY 2, 1, 4, 3, 5
    Si je remplace "table1 ... INNER JOIN table2" aux 2 endroits indiqués par la vue, la requete s'écroule

Discussions similaires

  1. augmentation du temps d'éxécution avec hold
    Par Zhitoune dans le forum MATLAB
    Réponses: 6
    Dernier message: 06/05/2009, 10h04
  2. Grosse différence de perf en GCC et Visual avec les STL
    Par vanitom dans le forum Visual C++
    Réponses: 4
    Dernier message: 28/04/2009, 09h35
  3. [Dates] Perdu avec strtotime et différence de temps
    Par skystef dans le forum Langage
    Réponses: 10
    Dernier message: 14/10/2008, 11h44
  4. [Web Service] Programme avec un long temps d'éxécution
    Par whism dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 02/06/2008, 20h30
  5. Réponses: 3
    Dernier message: 29/12/2006, 00h28

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