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 Oracle Discussion :

Requête avec jointure en comparaison


Sujet :

SQL Oracle

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut Requête avec jointure en comparaison
    (re)Bonjour.

    J'ai un souci de performances sur cette requête assez simple:

    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
    WITH table1 AS (
    SELECT 1 AS col1, 150 AS col2 FROM dual union ALL
    SELECT 2 AS col1, 250 AS col2 FROM dual union ALL
    SELECT 3 AS col1, 350 AS col2 FROM dual union ALL
    SELECT 4 AS col1, 450 AS col2 FROM dual union ALL
    SELECT 5 AS col1, 550 AS col2 FROM dual union ALL
    SELECT 6 AS col1, 650 AS col2 FROM dual),
    table2 AS (
    SELECT 1 AS col1, 100 AS borneinf, 199 AS bornesup FROM dual union ALL
    SELECT 2 AS col1, 200 AS borneinf, 299 AS bornesup FROM dual union ALL
    SELECT 3 AS col1, 300 AS borneinf, 399 AS bornesup FROM dual union ALL
    SELECT 4 AS col1, 400 AS borneinf, 499 AS bornesup FROM dual)
    SELECT t1.*, t2.col4
      FROM table1 t1, table2 t2
    WHERE t1.col2 >= t2.borneinf
       AND  t1.col2 <= t2.bornesup;
    J'ai des index sur les éléments de comparaison (t1.col2, t2.borneinf et t2.bornesup) qui sont des NUMBER.

    t1 fait 64 000 lignes, et t2 fait 134 000 lignes. L'insertion de ce select dans une table vide prend 2h...... alors que t1 contiendra 900 000 lignes.

    L'explain plan est en pièce joint. C'est le MERGE qui coince...

    Une précision: dans la table t2, chaque intervalle [borneinf; bornesup] n'est qu'en un seul exemplaire, et les intervalles ne se chevauchent pas. Il faudrait que pour chaque ligne, la comparaison s'arrête dès qu'on en a trouvé un (il peut n'y avoir aucun intervalle).

    Merci pour votre aide!
    Images attachées Images attachées  

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

Discussions similaires

  1. Requête avec jointure
    Par Maglight dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/11/2005, 09h57
  2. optimisation d'une requête avec jointure
    Par champijulie dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 07/07/2005, 09h45
  3. Requête avec jointures
    Par Corben dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/11/2004, 12h55
  4. Mise à jour de table impossible après requête avec jointure
    Par sto dans le forum Bases de données
    Réponses: 5
    Dernier message: 17/03/2004, 13h24
  5. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33

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