|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : mai 2010 Messages : 37 ![]() |
Bonjour,
j'ai une db avec plusieurs millions de lignes avec une colonne nvarchar(max) vide ou remplie sur laquelle je dois faire des centaines de recherches en fulltext/jour. J'aurai voulu savoir ce qui allait rendre les requêtes plus rapide : - lancer directement ma requête sans me soucier d'un "where .. is not null" - ajouter ce "where .. is not null" - travailler avec une colonne additionelle en booléen qui spécifie si la colonne est vide ou non Merci. |
|
|
00
|
|
|
#2 |
|
Membre chevronné
![]() ![]() Inscription : juillet 2006 Messages : 1 194 ![]() |
Quels sont vos critères de recherche ?
Tout ceux-ci apparaissent dans la clause WHERE ou vous faites des filtres sur le résultat dans un second temps ? |
|
|
00
|
|
|
#3 | |
|
Membre Expert
![]() |
Citation:
la recherche FULLTEXT sur votre colonne NVARCHAR(MAX) (au passage le UNICODE est'il nécessaire dans votre cas? avez vous des caractères autres que latin?) sera t'elle votre seul prédicat? Je ne pense pas que différentier les colonnes NULL sera bénéfique car vous nez requetez pas vraiment sur la colonne mais sur des données indexées par le FULLTEXT.
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#4 | ||
|
Invité régulier
![]() Inscription : mai 2010 Messages : 37 ![]() |
Bonjour, mes requêtes les plus chargées ressemblent à ceci :
Code :
La question concernait donc ces 2 filtres fulltext (CONTAINS). Devrais-je d'abord tester si la col5 et col6 sont nulles ou cela se fait-il indirectement par SQL Server de toute façon avant de passer à la suite? Aussi, est-ce que la place des clauses a-t-elle une influence ? Mettre les "where is not null" dans début de WHERE ? Merci. |
||
|
|
00
|
|
|
#5 | ||
|
Membre Expert
![]() |
Citation:
Citation:
est-ce un exemple bidon? Vous tester si col3 est NULL puis vous faites vos recherches FULLTEXT sur deux autres colonnes? Ici vous devez clairement avoir un index sur col4 par exemple.
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
||
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() |
Code :
Quel caractères diacritiques ne pouvez vous pas gérer en NON UNICODE?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
||
|
|
00
|
|
|
#7 | |
|
Invité régulier
![]() Inscription : mai 2010 Messages : 37 ![]() |
Citation:
Le process démarre en fait sur un premier serveur avec SSIS qui flag déjà certaines colonnes en fonction de ... Ensuite, le tout est injecté sur un autre serveur sql où sera lancé cette requête. Y a-il un nombre d'occurences minimum à ne pas prendre en compte pour que cela vaille la peine de créer cet index? Exemple d'une colonne tinyint avec à peine 4 valeurs différentes. Pour l'unicode, tu as raison, mais je devrai quand même vérifier car SSIS prend ici des données du monde entier (internet) en dehors de ce qui est éloigné à 100% des caractères latin (asiatique, russe, etc.) merci iberserk. |
|
|
|
00
|
|
|
#8 | |
|
Membre Expert
![]() |
Citation:
Vous pourriez obtenir de bonnes performances avec une colonne calculée indexée qui ferait le calcul lors de l'ajout... vous n'auriez plus qu'a filtrer dessus. Quant à votre colonne avec 4 valeurs distinctes... le mieux est de tester l’intérêt de votre index... Peut-être pouvez vous penser à un partitionnement de table sur cette valeur?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#9 | |
|
Invité régulier
![]() Inscription : mai 2010 Messages : 37 ![]() |
Par exemple, je dois retrouver le modèle d'une voiture parmi des milliers de références dans 2 colonnes dont une en varchar(max) ... utiliser du LIKE prendrait une éternité.
Citation:
J'y penserai pour la suite quand le tout sera déjà au point de façon "simple" :-) |
|
|
|
00
|
|
|
#10 | ||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 668 ![]() |
Bonjour,
Citation:
Citation:
Il fait cela par échantillonnage. L'ordre des filtres de la clause WHERE dans une requête n'ayant pas de sous-requête importe peu. Il peut influer parfois (mais rarement) en tentant de déplacer le filtre du WHERE dans le prédicat d'une équi-jointure (INNER JOIN). Citation:
Citation:
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||||
|
00
|
|
|
#11 | |
|
Membre Expert
![]() |
Citation:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#12 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 668 ![]() |
Ça peut marcher si le prédicat du CONTAINS est tout le temps le même ... je doute que ce soit le cas
Peut-être sur col4 ? Sans la définition de la table et son utilisation, pas facile @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#13 | |
|
Membre Expert
![]() |
Citation:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#14 | |||
|
Invité régulier
![]() Inscription : mai 2010 Messages : 37 ![]() |
Je sais bien mais cela serait trop compliqué voir chaotique de tout décortiqué ;-)
Citation:
Citation:
Ok, je pense avoir eu les réponses dont j'avais besoin pour continuer. Merci beaucoup. |
|||
|
|
00
|
|
|
#15 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 668 ![]() |
http://blog.developpez.com/elsuket/p...-d-u/#more7945
Citation:
Citation:
De cette façon vous devriez même pouvoir vous passer du stockage du document HTML. @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#16 | ||
|
Membre Expert
![]() |
Citation:
Citation:
Les gains peuvent-être très intéressant en terme temps de réponse mais permet aussi de ne pas mettre à jour certains index sur les INSERT UPDATE... Dans tous les cas n’hésitez pas à nous faire un retour sur les gains/solutions que vous avez adopté, le forum sert aussi à çà...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com