|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Inscription : novembre 2004 Messages : 160 ![]() |
Bonjour,
j'ai un probleme avec toutes mes requetes like voici un exemple : Code :
SELECT CLNOM FROM CLIENT WHERE CLNOM LIKE 'A%'; Maintenant si je fait la meme chose avec une variable : Code :
SELECT CLNOM FROM CLIENT WHERE CLNOM LIKE :STR; 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. |
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
Si par bonheur, tu recherches tout le temps une chaine commençant par xxx, tu peux essayer avec
__________________
"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 MPUsus magister est optimus |
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : novembre 2004 Messages : 160 ![]() |
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 ? |
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
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 MPUsus magister est optimus |
|
|
00
|
|
|
#5 | |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
Citation:
tous les moteurs sql ont ce comportement
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
|
00
|
|
|
#6 | |
|
Membre régulier
![]() Inscription : novembre 2004 Messages : 160 ![]() |
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 : Citation:
Mais peut etre quelque chose m'echappe ? |
|
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
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 |
|
00
|
|
|
#8 | ||
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
Citation:
Citation:
__________________
"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 MPUsus magister est optimus |
||
|
|
00
|
|
|
#9 |
|
Membre régulier
![]() Inscription : novembre 2004 Messages : 160 ![]() |
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 ? |
|
|
00
|
|
|
#10 |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
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 MPUsus magister est optimus |
|
|
00
|
|
|
#11 |
|
Membre régulier
![]() Inscription : novembre 2004 Messages : 160 ![]() |
Le probleme est que je n'arrive pas a specifier le plan des qu'il y a un like avec variable !
|
|
|
00
|
|
|
#12 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
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 |
|
00
|
|
|
#13 |
|
Membre régulier
![]() Inscription : novembre 2004 Messages : 160 ![]() |
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 ! |
|
|
00
|
|
|
#14 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
forcément
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#15 |
|
Membre régulier
![]() Inscription : novembre 2004 Messages : 160 ![]() |
Et existe t'il alors une solution pour un cas su type a%b% ?
|
|
|
00
|
|
|
#16 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
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 |
|
00
|
|
|
#17 |
|
Membre régulier
![]() Inscription : novembre 2004 Messages : 160 ![]() |
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 ! |
|
|
00
|
|
|
#18 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
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 |
|
00
|
|
|
#19 |
|
Membre régulier
![]() Inscription : novembre 2004 Messages : 160 ![]() |
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! |
|
|
00
|
|
|
#20 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
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 |
|
00
|
Copyright © 2000-2012 - www.developpez.com