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

DB2 Discussion :

[DB2/linux 8.2.0] Quelle stratégie pour mes index ?


Sujet :

DB2

  1. #1
    Membre du Club
    Profil pro
    dev
    Inscrit en
    Octobre 2002
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Octobre 2002
    Messages : 53
    Points : 61
    Points
    61
    Par défaut [DB2/linux 8.2.0] Quelle stratégie pour mes index ?
    Bonjour à tous,
    je travaille sur l'optimisation en montée en charge d'un soft qui fait beaucoup de requetage sur une bdd DB2/linux 8.2.0 chargée avec une importante volumétrie.
    Je voudrais votre avis sur l'organisation des index.
    j'ai des requetes du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM T1 
    WHERE T1C1=v1 
    AND  T1C2=v2 
    ORDER BY T1C1
    Le where porte sur la clé primaire T1C1 et T1C2 mais dois-je aussi faire un index sur T1C2 seul ?
    Inversement, j'ai des requetes du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * 
    FROM T1 
    WHERE T1C1=v1 
    ORDER BY T1C1, T1C2
    où c'est le order by qui porte sur la clé primaire et le where sur un seul champ.

    Que me conseilleriez-vous pour placer des index afin d'optimiser les performances ?

    D'autre part, et comme j'entends tout et son contraire est-ce qu'un select * est plus consommateur (au niveau travail de DB2, je ne considère pas le trafic réseau) qu'un select de quelques champs (ca dépend certainement de la topologie de la table, mais dans un cas moyen) ?


    En vous remerciant de vos conseils

  2. #2
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    Tout d'abord oui un select * est plus lent. C'est simple à comprendre car plus de données sont lues et stockées en mémoire et éventuellement réécrites dans une table temporaire.

    Pour les index, si j'ai bien compris ta clé primaire porte sur T1C1, T1C2. Dans ce cas, il n'y a pas d'optimisation possible du moins à ma connaissance.

  3. #3
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 286
    Points
    3 286
    Par défaut Re: stratégie pour mes index
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM T1 
    WHERE T1C1=v1 
    AND  T1C2=v2 
    ORDER BY T1C1
    Si C1 et C2 forment la clé primaire, je ne vois pas comment on peut faire mieux comme accès ...
    Par contre comme la requête va ramener une ligne (définition même de la clé primaire) pourquoi trier (une ligne !) sur C1 ?
    Quelque chose doit m'échapper ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * 
    FROM T1 
    WHERE T1C1=v1 
    ORDER BY T1C1, T1C2
    Là aussi difficile, à mon avis, de jouer sur les colonnes de l'index. Je ne vois pas ce qu'on peut faire !
    Par contre la performance globale de la requête dépend de la sélectivité de la première colonne de l'index.


    D'autre part, et comme j'entends tout et son contraire est-ce qu'un select * est plus consommateur (au niveau travail de DB2, je ne considère pas le trafic réseau) qu'un select de quelques champs (ca dépend certainement de la topologie de la table, mais dans un cas moyen) ?
    A mon avis, du point de vue des performances, on a toujours interêt à citer dans une requête la ou les colonnes que l'on veut obtenir, surtout si il y a une différence significative avec le nombre total de colonnes de la table. La gain est-il important ? Là je ne sais pas trop ...

    L'inconvénient du SELECT * est plus un problème de maintenance et d'évolutivité d'un logiciel par rapport au modèle physique des données surtout dans le cas d'un langage hôte.

  4. #4
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut Re: stratégie pour mes index
    Citation Envoyé par Luc Orient
    Par contre comme la requête va ramener une ligne (définition même de la clé primaire) pourquoi trier (une ligne !) sur C1 ?
    Quelque chose doit m'échapper ...
    Bien vu, cela m'avait échapé mais je pense que l'optimizer va se charger de ne rien faire .

  5. #5
    Membre du Club
    Profil pro
    dev
    Inscrit en
    Octobre 2002
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Octobre 2002
    Messages : 53
    Points : 61
    Points
    61
    Par défaut
    Par contre comme la requête va ramener une ligne (définition même de la clé primaire) pourquoi trier (une ligne !) sur C1 ?
    Quelque chose doit m'échapper ...
    Bonsoir,
    le order by vient du fait que les requêtes sont générées à partir d'un framework maison sous delphi et que ce framwork fait ses requêtes ainsi...
    même s'il est évident que ca n'a pas toujours une grande utilité!

    Merci de vos réponses
    Estats

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

Discussions similaires

  1. [Débutant] Quelle stratégie pour mon projet ?
    Par patguits dans le forum Services Web
    Réponses: 0
    Dernier message: 09/09/2013, 14h49
  2. [Généralités] Quelle stratégie pour la modification de structure ?
    Par cladoo dans le forum WinDev
    Réponses: 9
    Dernier message: 22/05/2013, 11h07
  3. Réponses: 3
    Dernier message: 23/05/2011, 11h39
  4. Quelle stratégie pour l'authentification ?
    Par Invité dans le forum Struts 1
    Réponses: 8
    Dernier message: 19/02/2008, 16h29
  5. Quelle stratégie pour coupler Hibernate et Swing ?
    Par sethys dans le forum Hibernate
    Réponses: 5
    Dernier message: 09/10/2007, 20h38

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