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 :

[Requête] jointure externe et conversion de type


Sujet :

DB2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 3
    Par défaut [Requête] jointure externe et conversion de type
    Bonjour,

    je dois faire des requêtes sur une base DB2 sur zOs.
    Comme c'est une base de production, je n'ai pas les autorisations pour ajouter des index par exemple.

    J'ai 2 tables (jai modifié les noms pour que ce soit lisible ) de 300 000 lignes (donc pas grosses...)

    tableA
    cle
    champ_dec DECIMAL(11)

    tableB
    cle
    champ_char CHAR(11)

    Il n'y a pas d'index sur champ_char

    Je dois récupérer tous les enregistrements de tableA dont le champ_dec ne correspond à aucun champ_char dnas tableB.
    En fait champ_dec est un entier (oui je sais )

    J'ai donc écrit la requête suivante :

    select tableA.cle
    from tableA
    where subtr(ltrim(char(tableA.champ_dec)),1,11)
    not in
    (
    select tableB.champ_char
    from tableB
    )
    ;


    Comme ça prenait des heures (littéralement), j'ai réécrit comme j'aurais fait sous Oracle, avec une jointure externe:

    select tableA.cle
    from
    tableA
    left outer join
    tableB
    on
    substr(ltrim(char(tableA.champ_dec)),1,11)=tableB.champ_char
    where tableB.champ_char is null
    ;

    Le temps de réponse est toujours aussi déplorable, je n'arrive pas au bout en une heure. Mes collègues me disent que c'est toujours comme ça lorsqu'il y a une conversion de type. Il est vrai que j'ai écrit une requête similaire (tables de même taille, pas d'index utilisable) mais sans conversion, et ça n'a pris que quelques minutes.

    Auriez-vous des idées? Car là je sèche complétement, même après avoir parcouru la doc et des forums, je n'ai rien trouvé... Je suis à court d'idées.

    Merci

    PS : je ne peux pas convertir dans l'autre sens, il y a apparemment des valeurs de champ_char qui ne sont pas numériques...

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2006
    Messages : 27
    Par défaut mmh
    N'étant pas un spécialise de DB2, j'ai tout de même une idée qui serait intéressante à tester.

    L'idée est de faire une table temporaire avec ton champ modifié substr(ltrim(char(tableA.champ_dec)),1,11) puis de faire la jointure entre cette table temporaire et la table nommée tableB.

    C'est pas dit que tu gagnes réellement du temps, mais parfois, il est pratique de décomposer en plusieurs sous-problèmes, notamment en optimisation de requête.

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 3
    Par défaut
    Hélas, on n'a pas le droit de créer de table, même temporaire... Sinon j'aurais bien essayé...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2006
    Messages : 27
    Par défaut mmh
    Si tu as "le droit" de faire des procédures stockées, tu peux bien évidemment passer par ce principe.

    En revanche, si tu n'as toujours pas la possibilité de faire, ça, j'ai bien peur que tu ne puisses pas faire grand chose pour améliorer les perf'

  5. #5
    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
    Par défaut
    Ce n'est pas grand chose mais enleve le ltrim il ne sert à rien puisque tu fait un substr après.

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

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Par défaut
    Il serait judicieux d'avoir le chemin d'accès choisi par DB2 (fonction EXPLAIN en DB2 for z/OS) ...

Discussions similaires

  1. [Mysql5] Problème requête jointures externe
    Par sterix92 dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/12/2011, 14h03
  2. Requête Jointure externe retournant 0 si pas de liaison
    Par jubourbon dans le forum Langage SQL
    Réponses: 7
    Dernier message: 17/10/2011, 16h59
  3. Requête MAJ - Échec de conversion de type - DATE et $
    Par MarieRoy dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 23/02/2011, 03h28
  4. [Débutant]Soucis requête jointure externes (8-i)
    Par jdotti dans le forum Oracle
    Réponses: 7
    Dernier message: 14/10/2005, 15h39
  5. Réponses: 6
    Dernier message: 20/09/2004, 15h26

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