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

Oracle Discussion :

Vue sans union / performance


Sujet :

Oracle

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Par défaut Vue sans union / performance
    Bonjour à tous,

    Voilà, je désirerai faire une vue, le problème c'est qu'elle n'accepte pas les unions (oracle 9i). Seulement, je rencontre des problèmes de performances.

    Si je fais un count(*) de la requête avec l'union, elle s'effectue en moins de 0,01 sec,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT   table1.*
    FROM table1,
      table2
    WHERE SUBSTR(table1.code,   1,   2) = table2.subcode
     AND table1.codebase = table2.code
    UNION
    SELECT 
       table1.*
    FROM table1
    WHERE  substr(table1.code,1,2) not in ( select subcode from table2);
    si je ne fais pas l'union, plus de 5 sec.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT   table1.*
    FROM table1,
      table2
    WHERE (SUBSTR(table1.code,   1,   2) = table2.subcode
     AND table1.codebase = table2.code)
     or substr(table1.code,1,2) not in ( select subcode from table2);
    Vous allez me dire ne fais pas de count(*), mais j'ai besoin de faire un count(*) car je veux limiter l'affichage de la liste dans mon appli

    Auriez vous des solutions à me suggérer?

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    il suffit de sélectionner les colonnes plutôt que * et tu pourras faire ton UNION

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Par défaut merci Fred D
    Merci pour la réponse rapide.

    En fait j'utilise sqldeveloper pour creer ma vue et je testais la syntaxe avant de creer ma vue.
    Et j'avais le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    The SQL syntax is valid, however the query is invalid or uses functionality that is not supported.
     
    Declarative query support does not currently include UNION, INTERSECT or MINUS
    MAis si je force la création avec la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT   table1.*
    FROM table1,
      table2
    WHERE SUBSTR(table1.code,   1,   2) = table2.subcode
     AND table1.codebase = table2.code
    UNION
    SELECT 
       table1.*
    FROM table1
    WHERE  substr(table1.code,1,2) NOT IN ( SELECT subcode FROM table2)
    Ca marche.
    Voila, si ca peut servir à quelqu'un.

  4. #4
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Attention quand tu fait UNION tu fait faire un DISTINCT implicite, et qui dit "DISTINCT" dit "Tri sur toutes les données" donc beaucoup de ressources prises. Si tu veux faire un simple ajout n'utilise pas UNION mais "UNION ALL".

    D'autre part ça arrive souvent que le count(*) soit plus rapide parceque l'optimiseur ne va scaner que les index de clef primaire si possible, le plan d'éxécution étant différent, il est normal que les temps le soient aussi.

  5. #5
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    en revanche, count(*) êut-être très long à cause d'une HWM trop loin

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Par défaut merci pour ce complément d'informations
    Qu'est ce qu'un HWM trop loin?

  7. #7
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    Human White Matter ?

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    HWM = High-Watter Mark, cf un tutoriel de Fred_d : http://oracle.developpez.com/guide/a...lespaces/#L1.4

  9. #9
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    Ah ok, je croyais à un gag comme le CKI (Chair Keyboard Interface)

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

Discussions similaires

  1. [JPA] Mapper des vues sans primary key
    Par MasterSpinal dans le forum JPA
    Réponses: 4
    Dernier message: 08/06/2009, 15h13
  2. [Avis] Vue avec union sur plusieurs tables
    Par adiGuba dans le forum Langage SQL
    Réponses: 0
    Dernier message: 22/09/2008, 11h50
  3. Select ou vue ? Difference de performances ?
    Par CkurcK dans le forum Optimisations
    Réponses: 2
    Dernier message: 25/08/2006, 20h49
  4. Réécriture de requête sans UNION
    Par lyondif02 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/07/2006, 17h49
  5. PB de vue utilisant UNION avec ENTERPRISE MANAGER
    Par punglas dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/12/2004, 15h18

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