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 :

"LIKE UPPER" plus rapide que "IN" ou "="


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de thanaos
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut "LIKE UPPER" plus rapide que "IN" ou "="
    Bonjour à tous.
    Pour mon premier post voilà une épine que je n'arrive pas à retirer.
    La requête suivante :

    SELECT tb2.* FROM tb1,tb2 WHERE tb1.id_tb1=tb2.fk_id_tb1
    AND tb1.id_tb1 IN (nb1,nb2,nb3,nb4,nb5)

    à un millénaire en temps de réponse alors que

    SELECT tb2.* FROM tb1,tb2 WHERE tb1.id_tb1=tb2.fk_id_tb1
    AND ( tb1.id_tb1 IN LIKE('nb1')
    OR tb1.id_tb1 IN LIKE('nb2')
    OR tb1.id_tb1 IN LIKE('nb3')
    OR tb1.id_tb1 IN LIKE('nb4')
    OR tb1.id_tb1 IN LIKE('nb5')
    )

    répond tel Flash l'éclair.
    Vous l'aurez compris id_tb1 est une PK de type NUMBER indexée.

    O Grands Maîtres de l'Oracle, montrez moi la lumière.

  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
    IN LIKE ça marche ????

    Merci de penser à mettre les balises CODE

  3. #3
    Membre expérimenté
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Par défaut
    Est ce que tu n'aurais pas par hasard lancé tes deux commandes l'une après l'autre?

    Parce que dans ce cas, la première commande aura remonté la table en mémoire et la deuxième aura donc gagné tout le temps nécessaire aux accès disque.

    Sinon l'explication devrait t'être donnée par un explain plan et le choix des index par Oracle.

  4. #4
    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
    on remarque aussi que la 1° référence des colonnes et non des valeurs

  5. #5
    Membre confirmé Avatar de thanaos
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut
    Désolé pour le IN LIKE...c'est LIKE bien sur.
    J'aurais du écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT tb2.* FROM tb1,tb2
    WHERE tb1.id_tb1=tb2.fk_id_tb1
    AND tb1.id_tb1 IN (154,342,856,1452,2563)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT tb2.* FROM tb1,tb2
    WHERE tb1.id_tb1=tb2.fk_id_tb1
    AND ( tb1.id_tb1 LIKE('154')
    OR tb1.id_tb1 LIKE('342')
    OR tb1.id_tb1 LIKE('856')
    OR tb1.id_tb1 LIKE('1452')
    OR tb1.id_tb1 LIKE('2563')
    )
    Pour les requêtes lancées l'une après l'autre, c'est non. Les indexs, eux, ont été reconstruits plusieurs fois. Ils portes sur les id respectifs des deux tables.
    Voici une analyse faite par Toad 8.6 :
    • Library Cache Get Hit Ratio - 74.5657 - Dynamique or Unsharable SQL ?
    • Library Cache Pin Hit Ratio - 80.4034 - Shared Pool area too small
    • Chained Fetch Ratio - 0.5586 - PCTFREE too low for a table
    • Parse to Execute Ratio - 96.2764 - High parse to execute ratio

    J'ai du mal à comprendre que sur des tables qui ne dépassent pas 3000 lignes, une instance qui fait moins de 50Mo de données, un select par IN ou = sur des colonnes de type NUMBER soit moins rapide qu'un LIKE et même un LIKE UPPER
    Pour ma par, cela resemble à une dégradation de l'instance...peut être , peut être pas...je ne sais plus que penser.

    (merci pour vos réponses)

  6. #6
    Membre expérimenté
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Par défaut
    Est ce que tu as les EXPLAIN PLAN de tes deux SELECT?
    Que l'on voie comment il accède aux données...

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

Discussions similaires

  1. Access plus rapide que SQL server ????? (débutante)
    Par 24 faubourg dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 21/12/2005, 17h36
  2. [D7] composants plus rapides que dbExpress pour Oracle 8i
    Par Magnus dans le forum Bases de données
    Réponses: 2
    Dernier message: 10/10/2005, 12h06
  3. Plus rapide que bresenham ?
    Par mathieu_t dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 01/06/2005, 13h28
  4. [VB6] timer plus rapide que 1 d'interval
    Par windob dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 24/02/2004, 00h16
  5. Réponses: 8
    Dernier message: 31/10/2003, 16h21

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