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

Firebird Probleme like


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Par défaut Firebird Probleme like
    Bonjour,


    j'ai un probleme avec toutes mes requetes like voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select CLNOM FROM CLIENT WHERE CLNOM LIKE 'A%';
    Dans ce cas firenbird utilise bien l'index qui est sur la colonne nom.
    Maintenant si je fait la meme chose avec une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select CLNOM FROM CLIENT WHERE CLNOM LIKE :STR;
    Dans ce cas firebird n'utilise plus l'index (:STR= 'A%')

    J'ai le meme problem en fb 1.5 et 2.0.

    Je trouve ce probleme vraiment problématique car dans les procédures stockée ou l'on passe les chaine de recherches on est obligé de passser par des variables !

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 944
    Par défaut
    Si par bonheur, tu recherches tout le temps une chaine commençant par xxx, tu peux essayer avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where CLNOM STARTING WITH 'A';

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Par défaut
    Merci mais je connaissait starting with mais ca ne correspond pas a ce que je cherche.

    Ca vous parait pas aberent que le like avec variable ne prenne pas l'index ?

  4. #4
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 944
    Par défaut
    Sinon, tu peux toujours forcer l'utilisation du PLAN qui va bien pour le select (cf la doc.)

  5. #5
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    Citation Envoyé par le-roy_a
    Merci mais je connaissait starting with mais ca ne correspond pas a ce que je cherche.

    Ca vous parait pas aberent que le like avec variable ne prenne pas l'index ?
    non, parce que dans ce cas, on ne peux pas savoir si tu vas faire un LIKE 'A%' qui sera en interne transformé STARTING WITH ou si tu vas faire un LIKE '%A' ou LIKE '%A%' et donc on prépare le plus petit dénominateur commun
    tous les moteurs sql ont ce comportement

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Par défaut
    Ok mais dans le cas ou je fais Like 'A%B%' il serait intéréssent d'utiliser l'index.
    De plus

    > tous les moteurs sql ont ce comportement

    Oracle n'a pas ce comportement :
    tous les moteurs sql ont ce comportement :
    Extrait de la doc officiel :
    Pattern Matching on Indexed Columns

    When you use LIKE to search an indexed column for a pattern, Oracle can use the index to improve the statement's performance if the leading character in the pattern is not "%" or "_". In this case, Oracle can scan the index by this leading character. If the first character in the pattern is "%" or "_", then the index cannot improve the query's performance because Oracle cannot scan the index.
    Car effectivement il suffit de regarder si le premier caractere n'est pas un %

    Mais peut etre quelque chose m'echappe ?

  7. #7
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    ce qui t'échappe c'est que firebird et Oracle ont le même comportement
    lit bien
    test, tu verras
    avec des données en "dur" on peut optimiser, avec des paramêtres non
    car la requête est préparée avant de recevoir les paramêtres
    donc je confirme, tous les moteurs ont le même comportement

  8. #8
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 944
    Par défaut
    Citation Envoyé par le-roy_a
    Oracle n'a pas ce comportement
    L'extrait de la doc officielle que tu fournis ne dit pas autre chose que ce qu'avance makowski...
    Quand on utilise LIKE..... Oracle peut utiliser l'index....si le 1er caractère n'est pas '%' ou '_'...

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 737
    Par défaut
    Citation Envoyé par qi130
    Si par bonheur, tu recherches tout le temps une chaine commençant par xxx, tu peux essayer avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where CLNOM STARTING WITH 'A';
    en plus c'est plus rapide car ça utilise l'index alors que le like le fait pas !
    j'ai vu ça quelque part mais je ne sais plus ou !

  10. #10
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut

    Citation Envoyé par VLDG
    en plus c'est plus rapide car ça utilise l'index alors que le like le fait pas !
    j'ai vu ça quelque part mais je ne sais plus ou !
    Navré de te contredire mais qi130 à raison. Préciser like 'A%' ou starting with 'A' revient exactement au même car Firebird utilisera l'index du champ. Je me restreint bien sûr à la forme 'A%' comme le précisait qi130.

    C'est d'ailleurs tout le propos de cette discussion, et ce qu'essaye de faire comprendre P.Makowski depuis le début.

    Pour t'en convaincre fais une requête lambda dans IBExpert (que tu utilises si j'ai bien compris) avec un like 'A%' et tu verras que le plan utilise l'index.

    @+

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

Discussions similaires

  1. probleme like avec champ numérique
    Par popofpopof dans le forum Access
    Réponses: 3
    Dernier message: 10/12/2007, 22h58
  2. Probleme like avec un blob
    Par yupa dans le forum SQL
    Réponses: 7
    Dernier message: 09/11/2007, 20h09
  3. Probleme LIKE
    Par frenzy dans le forum Langage SQL
    Réponses: 5
    Dernier message: 24/10/2005, 15h05
  4. Probleme LIKE
    Par Yphon dans le forum Langage SQL
    Réponses: 5
    Dernier message: 03/10/2005, 08h26
  5. Probleme like '%00' avec interbase
    Par BOUBOU81 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/10/2004, 11h49

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