|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Candidat au titre de Membre du Club
![]() Arnaud Étudiant Inscription : mars 2011 Messages : 60 ![]() |
Bonjour,
Je souhaiterai faire une recherche de mot clés dans mon champs "Type" afin d'afficher dans une autre colonne "Type_Desc" le mot VOITURE si un des termes est trouvés. Je "complique" ensuite la requête si le mot est trouvé en vérifiant qu'il y a bien tel mot ou tel mot dans le champs Reference Je pensais faire la requête suivante mais je m'apercois qu'une erreur est générée du fait de l'utilisation de CONTAINS : La requête : Code :
Code :
Seulement je me demande si c'est bien cette solution que je dois adopter et adapter pour ma base SQL Server 2008 ? Ou il y a t-il d'autre solution ? Je pourrais utiliser le LIKE dans ma requête mais je suis obligé de préciser à chaque fois la colonne... Code :
(Reference) LIKE %CLIO% OR (Reference) LIKE %Clio% OR (Reference) LIKE... Cordialement bibouex |
||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Le message est explicite : il faut indexer ton champ reference avec un index fulltext.
Vu le nom de ta table, ça ne me semble pas une bonne idée : l'indexation fulltext est : 1/ lente 2/ consommatrice 3/ non fiable : si tu interroge l'index alors qu'il n'a pas fini sa mise à jour, tu n'auras pas de résultat OU des résultats qui ne contiennent pas ce que tu cherches ! Donc à réserver pour des tables de contenu qui ne changent pas énormément (référentiel produit, etc.) |
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Il reste donc le like, sâchant que c'est :
- lent - case sensitive - que ça suit pas les index - qu'à mon avis, tu devrais de débrouiller pour savoir si c'est une voiture ou une moto AVANT d'allimenter la table |
|
|
00
|
|
|
#4 |
|
Candidat au titre de Membre du Club
![]() Arnaud Étudiant Inscription : mars 2011 Messages : 60 ![]() |
Avant d'alimenter ma table ? C'est ce que je veux faire en travaillant sur la table TEMP avant le chargement de mes données dans mon Datawarehouse...
Bon j'ai pas expliquer tout mon projet mais j'ai fait un petit post juste avant sur le forum justement pour comprendre la manière d'agir au niveau de l'ETL... http://www.developpez.net/forums/d11...uestion-t-etl/ Ma table TEMP n'est autre qu'une table de préparation de mes données donc en gros je voulais rajouter un champs dans TEMP pour faire le tri afin que deriere dans mon DW je puisse faire la jointure sur ma dimension TYPE_VEHICULE, dans laquelle j'ai VOITURE ou MOTO Enfin c'est un exemple que j'ai donnée, c'est pas les vrai nom de table et de champs car sinon ca devenait trop compliqué... |
|
|
00
|
|
|
#5 | ||
|
Membre Expert
![]() |
Citation:
Le like peut très bien tirer partie d'un index.... Citation:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
||
|
|
00
|
|
|
#6 |
|
Candidat au titre de Membre du Club
![]() Arnaud Étudiant Inscription : mars 2011 Messages : 60 ![]() |
Si je peux me permettre je pense que je vais suivre tes conseils (de par ton expérience et les nombreuses participation sur ce forum qui en on aidé plus d'un
De toute façon je me suis "planté" dans l'utilisation de SSIS puisque je l'utilise principalement comme un ordonnanceur et non pas en vrai Data Flow... J'ai juste utilisé la tache de flux de données afin d'extraire mon fichier source puis je l'envoie dans une table TEMP. Sur cette dernière j'ai crée toute une succession de tâches de requêtes SQL qui nettoient, modifient et ajoutent des données avant de tous dispatcher dans ma table des faits et mes dimensions... Donc ne comprenant pas très bien comment marche chaque module SSIS et comprenant de mieux en mieux le langage SQL je crois que le plus simple est d'utiliser l'indexation sur mon champ "Reference", enfin je crois ? Si vous avez d'autres conseils je suis preneur |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() |
Attention, lis ma réponse, je ne fais que répondre à StringBuilder pour le coups...
Si c'est une table de "travail" utilisé comme table intermédiaire dans ton lot SSIS l'indexation FULLTEXT n'est peu être pas la meilleur solution du fait de l'indexation asynchrone... La colonne indexée est elle grosse?Combien de lignes as tu? le mieux est que tu test... Pour ma part l'indexation de plusieurs milliers de ligne est instantannée...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
00
|
|
|
#8 |
|
Candidat au titre de Membre du Club
![]() Arnaud Étudiant Inscription : mars 2011 Messages : 60 ![]() |
Je viens de faire le test sur 130 mille lignes et cela est instantanée également...
Donc je pense que ça posera pas de problème pour le moment, par contre du coup quand je veux faire ma recherche avec CONTAINS j'ai un problème pour trouver une chaine de caractère avec un espace !? je cherche toute les valeurs commençant par un chiffre entre 1 et 200 puis avec/sans espace suivi de la lettre A Du style :
Code :
CONTAINS (Reference, '%CLIO% OR %mégane% OR [1-200]escapeA')) |
|
|
00
|
|
|
#9 | |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Citation:
Oui, quand on fait un like 'toto%', ou éventuellement un like '%toto', mais un like '%toto%', je ne suis pas certain que l'utilisation d'un index soit possible/pertinente. Je ne parlais pas de la recherche, mais de l'indexation. |
|
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Attention aux temps de réponse sur l'environnement de DEV !
L'indexation fulltext est asynchrone. Cela veut dire que rien ne t'empêche d'interroger l'index alors qu'il n'est pas reconstruit. Et dans ce cas, c'est vite catastrophique. Sur les grosses bases de production, on a rarement des index full text qui se construisent tous seuls, on attend généralement un moment calme de la journée pour le faire... Et si la base est fortement sollicité, elle le fera pour tout de toute façon, même si tu le force en automatique ! Donc inserrer 130 000 lignes d'un coup et faire des select dessus dans la milli-seconde qui suit, c'est suicidaire en fulltext. Il vaut mieux dans ton cas sacrifier un peu de CPU et faire un LIKE, qui donnera un résultat exact à tout les coups. J'insiste sur le fait que même si ta requête renvoie quelquechose, ce qu'elle renverra ne sera peut-être pas bon ! J'ai anciennement fait un site web qui utilisait fulltext pour faire des recherches dans des articles, et c'était assez marrant de voir que parfois, à 5 minutes d'interval, j'avais pas du tout les mêmes résultat... et parfois n'importe quoi car un article avait été modifié et interrogé avant la reconstrution de l'index, et on avait donc un article qui s'affichait dans la recherche, alors qu'il ne contenait pas du tout les mots recherchés ! |
|
|
00
|
|
|
#11 |
|
Candidat au titre de Membre du Club
![]() Arnaud Étudiant Inscription : mars 2011 Messages : 60 ![]() |
Merci bien a vous deux.
J'ai finalement fait l'indexation étant donné que mes changements en base ne sont que mensuels... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com