Forcer Utilisation d'un index dans une requete en VB
cs_paperino
Messages postés5Date d'inscriptionjeudi 1 août 2002StatutMembreDernière intervention28 juillet 2006
-
27 juil. 2006 à 15:43
michelatoutfox
Messages postés828Date d'inscriptionmardi 5 octobre 2004StatutMembreDernière intervention 7 mai 2013
-
28 juil. 2006 à 16:56
Bonjour,
J'ai cherché sur le forum comment faire pour forcer l'utilisation d'un index.
je m'explique, je vais chercher un numéro de serie (en utilisant une appli developpée en VB6) sur une table de grande taille et l'opération prend plusieurs minutes.
La table est (entre autres) indexée sur les numéros de série, donc je me demande (si c'est possible) comment forcer l'utilisation de cet index que l'on va appelé Index_numserie (contenu dans INDEX_Table.CDX).
Voici le début du code que j'utilise :
Set cn = New ADODB.Connection
cn.Open "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=M:\STOCK;Exclusive=No;Collate=Machine;NULL=NO;DELETED=YES;BACKGROUNDFETCH=NO"
requete "SELECT * FROM NOM_DE_LA_TABLE WHERE MV_NSER 'ABC123456'"
Merci d'avance
Nicolas
A voir également:
Forcer Utilisation d'un index dans une requete en VB
michelatoutfox
Messages postés828Date d'inscriptionmardi 5 octobre 2004StatutMembreDernière intervention 7 mai 20131 28 juil. 2006 à 11:06
Paperino,
quelques questions préalables:
- une table de grande taille, ça veut dire quoi, pour toi? est-ce que tu as une idée du nombre d'enregistrements de cette table (nbre de lignes).
- ta chaine de connexion mentionne un collate=Machine. connais-tu le collate de ton index?
- le fichier est sur l'unité M: Est-ce que c'est un disque local, ou bien passes-tu par un LAN?
cs_paperino
Messages postés5Date d'inscriptionjeudi 1 août 2002StatutMembreDernière intervention28 juillet 2006 28 juil. 2006 à 15:34
Alors, voilà, une base de grande taille c'est 800 Mega ...
Il y a plus de 1 300 000 enregistrements
Je passe par un lecteur mappé M:
En ce qui concerne le collate, je dois t'avouer que j'ai trouvé cette chaine de connexion sur le net et je ne sais pas à quoi ça correspond
si tu pouvais m'éclairer d'ailleurs, (et peut-etre les autres aussi) ca serait sympa
michelatoutfox
Messages postés828Date d'inscriptionmardi 5 octobre 2004StatutMembreDernière intervention 7 mai 20131 28 juil. 2006 à 16:56
si tu passes par un réseau, "plusieurs minutes" ne me surprennent pas, étant donné la taille de ta table et le nombre de lignes.
le collate, c'est la table de caractère nationaux utilisée pour l'exécution des requètes. Si cet index a été créé avec un set collate to machine, alors ton collate=machine te donnera la meilleure performance. Mais si par exemple, tu travailles sur un fichier de données dont l'index a été créé avec un collate to spanish, alors ta requète va ralentir. Elle te renverra le bon résultat, mais elle sera plus lente.
tu y trouveras notamment un exemple d'utilisation des commandes natives de VFP dans un cursor server ; il faudrait voir si l'utilisation de SEEK( ) te donne un résultat plus rapidement (parceque le deuxième paramètre de cette instruction, c'est le tag d'index)