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 :

PLS_INTEGER ou BINARY_INTEGER ?


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Par défaut PLS_INTEGER ou BINARY_INTEGER ?
    http://www.developpez.net/forums/showthread.php?t=96183

    Si je suis en 8i, j'utilise un simple compteur dans un FOR LOOP.

    Qu'est-ce qui est préférable comme utilisation le PLS_INTEGER ou BINARY_INTEGER ?

    Et pour quel(s) raison(s) ?

    D'après ce que j'ai vu dans la doc, ce serait mieux le binary pour des raisons d'EXCEPTIONS raised? Au niveau tps d'exécution y a t il un autre avantage /désavantage pour un simple compteur?

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    En ce qui concerne, la partie performance, faites un test avec quelques millions de boucles vides (avec l'instruction NULL) et comparez les résultats
    des temps d'exécution.

    En général, les problèmes de performances en PL/SQL sont plutôt liés au SQL utilisé et aux algorithmes: c'est bien plus le contenu de la boucle qui peut poser problème que le type de l'indice de boucle

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    note que dans Oracle 11g, il existe un nouveau type SIMPLE_INTEGER, qui est plus rapide et ne contient pas de NULL. Il ne contient pas d'exception, si tu ajoutes 1 à 2147483647 tu obtiens alors -2147483648.

    Mais ça peut dramatiquement améliorer la performance

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Avec DBMS_PROFILER (10g - Donc je peux pas tester, je suis en 9)
    Voici une partie du test de F Degrelle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE OR REPLACE PROCEDURE TEST_PROFILER
    IS
      TYPE TYP_TV1 IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER ;
      TYPE TYP_TV2 IS TABLE OF VARCHAR2(50) INDEX BY PLS_INTEGER ;  
      t1  TYP_TV1 ;
      t2  TYP_TV2 ;
    BEGIN
      For i IN 1 .. 1000 Loop
         t1(i) := i ;
         t2(i) := i ;
      End Loop ;
    END TEST_PROFILER ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UNIT_NAME       OCCURED TOT_TIME          LINE TEXT
    --------------- ------- ----------- ---------- ---------------------------------------------------
    TEST_PROFILER         1     .000063          1 PROCEDURE TEST_PROFILER
    TEST_PROFILER      1001     .000653          8   For i IN 1 .. 1000 Loop
    TEST_PROFILER      1000     .006956          9   t1(i) := i ;
    TEST_PROFILER      1000     .002220         10   t2(i) := i ;
    TEST_PROFILER         1     .000065         12 END TEST_PROFILER ;
    As we can see, PLS_INTEGER type is 4/5 times faster than NUMBER
    The NESTED TABLE INDEX BY PLS_INTEGER is 3 times faster than the INDEX BY BINARY_INTEGER

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Par défaut
    Ok, merci.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/08/2007, 22h46

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