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

Langage SQL Discussion :

Optimisation requête SQL


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 8
    Par défaut Optimisation requête SQL
    Bonjour,

    Je suis sous Informix 9.4 et j'aimerais optimiser une requête qui prend énormément de temps (a cause de la volumétrie de certaines tables qui contiennent plusieurs millions de lignes).

    Voici la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT DECODE (EQUIP.x3011_1_mychars[9], 'L', PCP.x3029_8_cmequip, 'D', CAST(EQUIP.X3011_1_mychars[10,18] AS INTEGER), 'F', CAST(EQUIP.X3011_1_mychars[10,18] AS INTEGER), -1), 
    DECODE (EQUIP.x3011_1_mychars[9], 'L', PCP.x3010_2_mychars[2,3], 'D', EQUIP.X3011_1_mychars[20,21], 'F', EQUIP.X3011_1_mychars[20,21], "")
    FROM SUBPOS 
    INNER JOIN UNLOADTABLE ON 
      SUBPOS.x3040_2_mychars = UNLOADTABLE.Stripename
    INNER JOIN MAINPOS 
      ON SUBPOS.x3040_9_orrmainpos = MAINPOS.id 
        AND MAINPOS.X3021_2_mychars[1,3] = UNLOADTABLE.node
    INNER JOIN PCP ON PCP.x3010_15_mychars[1,8] = SUBPOS.id
    INNER JOIN EQUIP ON PCP.x3029_8_cmequip = EQUIP.id
    Les performances sont dégradées à cause de la jointure en rouge qui va comparer toutes les sous-chaînes de PCP.x3010_15_mychars avec tous les champs id de la table SUBPOS

    Auriez-vous une solution sans utiliser de curseur ?

    Merci d'avance,

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je ne connais pas Informix, mais avez-vous essayé d'indexer ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PCP.x3010_15_mychars[1,8]

  3. #3
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 8
    Par défaut
    La colonne x3010_15_mychars est déjà indexée mais pas je ne peux pas indexer la sous chaîne x3010_15_mychars[1,8]

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454

  5. #5
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 8
    Par défaut
    Merci pour ta réponse.
    Je viens de créer un functionalIndex et en effet ca va beaucoup plus vite.

    Par contre la création de l'index prend énormément de temps. Si j'inclus la création de cet index dans mon script, le temps d'éxécution général n'est pas diminué.

    J'en demande peut être trop mais voyez-vous une autre solution ?

  6. #6
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    A priori, tu n'as besoin de créer ton index qu'une seule fois.
    A faire séparément et donc à ne pas inclure dans le script qui exécute la requête.

    Au passage, stocker plusieurs informations dans une même colonne est une mauvaise idée...

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

Discussions similaires

  1. Optimisation requête SQL
    Par ludo00002 dans le forum SQL
    Réponses: 2
    Dernier message: 06/10/2008, 09h01
  2. Comment optimiser requête SQL avec création Index
    Par schumi101 dans le forum SQL
    Réponses: 25
    Dernier message: 11/12/2007, 21h28
  3. optimisation requête SQL
    Par marti dans le forum Oracle
    Réponses: 4
    Dernier message: 27/04/2006, 08h54
  4. Besoin d'aide pour optimiser requête SQL
    Par Keuf95 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 06/09/2005, 16h02
  5. optimisation requête SQL!!! help!!
    Par anathem62 dans le forum Requêtes
    Réponses: 2
    Dernier message: 24/05/2004, 16h26

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