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

Adaptive Server Enterprise Sybase Discussion :

Jointure sur un index à deux colonnes


Sujet :

Adaptive Server Enterprise Sybase

  1. #1
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    42
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 42
    Points : 35
    Points
    35
    Par défaut Jointure sur un index à deux colonnes
    Bonjour à tous,

    Je rencontre un souci dans une requête SQL (lenteurs).

    J'ai une table volumineuse appelant la "table_resultat" ayant deux index comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CREATE  NONCLUSTERED INDEX idx1 ON table_resultat (A,B)
    CREATE  CLUSTERED INDEX      idx2 ON table_resultat (B,A)
    J'ai une autre table appelant table_status moins volumineuse que la tale table_resultat.

    Je souhaite faire une jointure entre ces deux tables la, on exploitant l'un des deux index cités précédemment.

    Dans un premier temps j'ai cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT count(*)
      FROM table_resultat R
      JOIN LIMIT_table_status S
      ON R.A=S.A
    AND R.B=S.B
    D'après le plan d'exécution, il me semble qu’il n’exploite pas l'index.

    Y a-t-il moyen de le forcer à utilise l'index ?

    Merci pour votre retour .

    Cordialement,
    hbellahc.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Le forçage d'index ce fait comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT count(*)
      FROM table_resultat R (index idx1)
      JOIN LIMIT_table_status S 
      ON R.A=S.A
    AND R.B=S.B
    La non-utilisation de l'index est en général causé par des statistiques qui ne sont pas à jour.

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Points : 48
    Points
    48
    Par défaut
    La non-utilisation de l'index est en général causé par des statistiques qui ne sont pas à jour.
    Il est aussi possible que l'optimiseur considère (calcul) qu'un "table scan" sera moins couteux ...

    Les index "idx1" et "idx2" ne sont pas unique ? c'est juste un oubli/simplification de l'exemple ou est-ce voulu ? (le couple "A" + "B" est-il unique ?)


    DBRep

  4. #4
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Citation Envoyé par DBRep Voir le message
    Les index "idx1" et "idx2" ne sont pas unique ? c'est juste un oubli/simplification de l'exemple ou est-ce voulu ? (le couple "A" + "B" est-il unique ?)
    C'est sûrement dû au fait que Sybase n'autorise qu'un seul index Cluster par table (et quand on comprend ce que fais un index clustered, cette limite paraît évidente).

    D'ou un cluster et l'autre non
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Mais le fait d'être "cluster" n'a rien à voir avec l'unicité...

    "clustered" est utile en cas de query "range" (en tout cas pour des tables APL) - difficile de dire dans le cas précis si le cluster est utile ou non sans connaitre le contenu de la table qui limite l'ensemble des lignes qui qualifies la query.

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Points : 48
    Points
    48
    Par défaut
    Mais le fait d'être "cluster" n'a rien à voir avec l'unicité...
    Tu m'enlèves les mots du clavier

    Ceci dit, je pense qu'un index "unique" doit aider l'optimiseur dans son choix ..



    DBRep

Discussions similaires

  1. [AC-2010] Jointure sur deux colonnes
    Par Babzoo dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/08/2013, 13h43
  2. Insérer un tableau sur un texte à deux colonnes
    Par cestvitedit dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 6
    Dernier message: 30/01/2013, 11h37
  3. comparer deux colonnes sur Excel
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 21/12/2005, 10h50
  4. Update dans SYBASE avec jointure sur 2 colonnes
    Par metheorn dans le forum Sybase
    Réponses: 2
    Dernier message: 24/06/2005, 16h51
  5. [CR] Faire un groupe sur deux colonnes, voir mon exemple
    Par Etienne51 dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 08/10/2004, 14h02

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