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 :

Simple Recherche LIKE très lente


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 12
    Par défaut Simple Recherche LIKE très lente
    Bonjour,

    Mon problème est relatif au temps d'exécution des requêtes de recherche.

    En effet, par exemple lorsque j'exécute la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select count(*) from REFCLPPP00 where CLPNOMCLIP LIKE 'touir%'
    La c'est OK ! Le serveur répond en moins d’1ms.

    Tandis que, si j'ajoute un "%" à gauche du mot à chercher, la requête prend une décennie pour s'exécuter ( une moyenne d'1min30s).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select count(*) from REFCLPPP00 where CLPNOMCLIP LIKE '%touir%'
    Je comprends que cette requête est plus compliquée que la première, mais un tel temps de réponse est loin d’être tolérable sachant que je suis contraint d'un timeOut de 30 s.

    Je n’arrive pas à déceler l'origine du problème, est-ce que je dois modifier une propriété d'oracle ?

    Merci, d'avance.

    À noter que :
    le champ CLPNOMCLIP est indexé.
    La table comporte 1894277 entrées.

  2. #2
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    le fait d'avoir un % en début et un % en fin empêche d'utiliser les index.

  3. #3
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    La collation influence largement le travail du processeur lors de ce type de recherche.

    Quelle est la COLLATION de votre colonne CLPNOMCLIP?
    Tester une comparaison avec COLLATION BINAIRE?

  4. #4
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Citation Envoyé par omar_elid Voir le message
    Bonjour,
    Je n’arrive pas à déceler l'origine du problème
    C'est juste normal pour un index.
    Imagines que tu doives chercher dans un dictionnaire tous les mots qui commencent par 'touir' : ça ira très vite.
    Imagines que tu doives chercher tous les mots qui contiennent 'touir' ... il faudra lire toutes les pages...

    Oracle Text a des possibilités pour indexer des mots.

    Cordialement,
    Franck.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 12
    Par défaut
    Merci pour vos réponses.

    iberserk si vous parlez de la Collation NLS_SORT, elle est en binaire.

    StringBuilder je confirme que dans le cas d'une recherche avec l'indexation simple n’optimise en aucun cas le temps d’exécution des requêtes.

    pachot, je vais suivre cette piste, d'après une première recherche je pense que c'est le bout de file de la solution, j' approfondirai mes connaissances sur Oracle Text indexation.

    je vais vous tenir au courant demain mon avancement

  6. #6
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Oracle Text a des possibilités pour indexer des mots.
    >pachot
    Je ne connais pas ORACLE parfaitement mais le FULLTEXT (puisque c'est de ca qu'il s'agit) ne permet pas de reproduire tout ce que peut faire un LIKE %%.

    Par exemple une recherche sur an ne retournera pas intervenant...

    Mais si vos recherches portent sur des mots, c'est votre solution en effet.

  7. #7
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT count(*) FROM REFCLPPP00 WHERE CLPNOMCLIP LIKE '%touir%'
    Plusieurs approches :

    1) tu sais (mais Oracle ne le sait pas) que seulement peu de mots contiennent touir, donc tu utilises un hint

    --> http://laurentschneider.com/wordpres...me-likebc.html

    2) tu cherches toujours sur '%touir%', tu crées un fbi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SQL> select count(*) from t where txt LIKE '%toui%';
      COUNT(*)
    ----------
            24
    Elapsed: 00:00:00.04
    SQL> create index fbi on t(case when txt LIKE '%toui%' then 1 end);
     
    Index created.
    SQL> select count(*) from t where case when txt LIKE '%toui%' then 1 end=1;
      COUNT(*)
    ----------
            24
    Elapsed: 00:00:00.01

  8. #8
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    L'idée est interessante, mais le resultat du temps de requetage de la solution prend aussi en compte le temps de creation de l'index ?

Discussions similaires

  1. [MySQL] Requête simple très lente
    Par TigerCX dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/04/2015, 15h18
  2. BDD sur réseau très très très lent...
    Par ericain dans le forum Access
    Réponses: 12
    Dernier message: 20/02/2015, 17h17
  3. Recherche sur de grosses tables très lentes
    Par webapi dans le forum Requêtes
    Réponses: 32
    Dernier message: 31/07/2013, 08h36
  4. rowSource trés lent sur zone de liste trés simple
    Par petitours dans le forum IHM
    Réponses: 1
    Dernier message: 15/06/2008, 21h39
  5. Programme "simple" devient très lent ?
    Par Invité dans le forum Delphi
    Réponses: 8
    Dernier message: 18/09/2006, 22h32

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