Efficacité de LIKE dans une expression SELECT

Efficacité de LIKE dans une expression SELECT - SQL/NoSQL - Programmation

Marsh Posté le 02-06-2005 à 18:40:11    

Bonjour,
 
j'ai besoin de rechercher dans un champs (de type text) d'une de mes tables la présence de plusieurs éléments. plutôt qu'une longue explication voici un exemple : j'ai une phrase A qui contient plusieur éléments tel que :

Code :
  1. {a1,e2,fa}

maintenant il faut que je verifie si tous ces éléments(a1et e2 et fa) sont contenus dans le champs de ma table qui peut être égale

Code :
  1. {12,56,a1,am,bn,e2,er,ey,fa,fm,...}

dans ce cas A est bien compris dans le champs de cet enregistrement. Je pense réaliser une requéte du type

Code :
  1. SELECT ID_P FROM table WHERE( Fingerprint LIKE '%a1%' AND Fingerprint LIKE '%e2'' AND Fingerprint LIKE '%fa%')

Cette expression étant construite dynamiquement.
 
Est-ce que cette solution peut-être remplacé par quelque chose de plus efficace ? Car je crains que la répétition de cette succession de LIKE soit assez longue à executer dés que leur nombre deviendra important (jusqu'à 50 pour une expression) et qu'il faudra l'executer sur plusieurs milliers (dizaine) d'enregistrement.
 
Merci pour vos commentaires,
Jean-Marie

Reply

Marsh Posté le 02-06-2005 à 18:40:11   

Reply

Marsh Posté le 02-06-2005 à 19:09:35    

Je ne vois pas de solution miracle que de faire des AND.
 
Ceci dit, faire des AND est pas mal, puisque dès qu'un élément ne sera pas trouvé, alors il abandonnera les autres tests, ce qui devrait préserver un minimum les performances, surtout si tu es capable de savoir à l'avance si tu as beaucoup de chances de trouver chaque "mot".
 
Sinon, je te conseille de faire commencer la phrase par "," et finir par ",", et faire LIKE '%,a1,%'
 
En effet, si ta phrase contient a12, alors un test sur a1 va retourner une ligne, alors que c'est pas forcément ce que tu veux.
 
Si tu avais eu des "OR" entre les critères et non des "AND", alors tu aurais aussi pu passer par une table temporaire et faire un PHRASE.CHAMP like '%' + MOTS.MOT + '%', ce qui aurait raccourci la requête (une seule clause).

Reply

Marsh Posté le 02-06-2005 à 23:26:16    

Je te remercie pour ta réponse : je crois que j'aurais mis un certain à trouver l'erreur du à la non utilisation des virgules !
 
Bonne soirée

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed