Forcer Utilisation d'un index dans une requete en VB

cs_paperino Messages postés 5 Date d'inscription jeudi 1 août 2002 Statut Membre Dernière intervention 28 juillet 2006 - 27 juil. 2006 à 15:43
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Derniè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

3 réponses

michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
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?
0
cs_paperino Messages postés 5 Date d'inscription jeudi 1 août 2002 Statut Membre Dernière intervention 28 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

Merci
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
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.

est-ce que tu as lu l'aide sur VFP OLEDB? tu peux charger oledb ici
 http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA-95A3289C5FD4&displaylang=en

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)
0
Rejoignez-nous