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

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Points : 144
    Points
    144
    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 éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 901
    Points : 6 026
    Points
    6 026
    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';
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Points : 144
    Points
    144
    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 éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 901
    Points : 6 026
    Points
    6 026
    Par défaut
    Sinon, tu peux toujours forcer l'utilisation du PLAN qui va bien pour le select (cf la doc.)
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  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 : 60
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    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
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Points : 144
    Points
    144
    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 : 60
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    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
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 901
    Points : 6 026
    Points
    6 026
    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 '_'...
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Points : 144
    Points
    144
    Par défaut
    Ok merci beaucoup je commence a comprendre mais le probleme c'est existe t'il une solution pour faire cela en firebird ?

    Car forcer le plan ca ne marche pas en fb1.5 :
    select USERNAME FROM USERS WHERE USERNAME Like :df
    PLAN (USERS INDEX (USERS_IDX4))

    Erreur :
    index cannot be used in the specified plan
    .
    index USERS_IDX4 cannot be used in the specified plan.

    Mais si je remplace like par egal il n'y a plus de probleme.

    Donc comment faire ?

  10. #10
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 901
    Points : 6 026
    Points
    6 026
    Par défaut
    Il faut commencer par savoir quel plan est utilisé en cas de recherche sur "%A".

    Ensuite, peut-être qu'en testant le format du paramètre (A% ou %A) dans la PS, tu conditionnes l'exécution d'une requète comportant le plan qui va bien.
    Mais, il faudra donc 2 séquences de Select dans la PS :
    - 1 mentionnant le plan basé sur l'index
    - 1 ne le mentionnant pas (ou mentionnant "l'autre" plan)
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Points : 144
    Points
    144
    Par défaut
    Le probleme est que je n'arrive pas a specifier le plan des qu'il y a un like avec variable !

  12. #12
    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 : 60
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    ne cherche pas à spécifier le plan
    si c'est dans une procedure stocké, test ton parametre si il est du type %..
    alors tu fait LIKE et sinon STARTING WITH
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Points : 144
    Points
    144
    Par défaut
    Ok mais ca marche seulement dans un cas :

    ex : A% ca marche
    mais A%B ca marche pas car starting with n'accepte pas les caracteres joker !

  14. #14
    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 : 60
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    forcément
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Points : 144
    Points
    144
    Par défaut
    Et existe t'il alors une solution pour un cas su type a%b% ?

  16. #16
    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 : 60
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    dans le cas fait :
    USERNAME STARTING WITH 'A' AND USERNAME LIKE '%B%'
    et tu utiliseras l'index
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Points : 144
    Points
    144
    Par défaut
    ok merci,

    Mais n'existerais t'il pas un systeme de full text search come dans oracle ? car ca serait tous de meme plus pratique !

  18. #18
    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 : 60
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    si ça existe mais pas en standard, il y a plein de gens qui ont des solutions de ce type, tu peux même utiliser lucene avec firebird si tu veux
    mais c'est tout à fait autre chose que ton petit problème
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Points : 144
    Points
    144
    Par défaut
    Merci,

    mais pour info ce n'est pas du tout un petit problème certe dans l'example c'est simpliste mais dans la réalité c'est tout autres choses.

    merci quand meme!

  20. #20
    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 : 60
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    bah, tu n'as que trois cas à traiter
    et pour les outils dispos tu as :
    http://www.codeproject.com/cs/databa...xtFirebird.asp
    et aussi
    http://www.ibphoenix.com/main.nfs?a=...=ibp_dotlucene
    sachant que Pylucene fonctionne aussi
    et que c'est prévu de faire un jour un full text search, il faut juste le temps et les sous pour le faire
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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