Bonjour,

voila j'ai une question simple :

Est-ce que les curseurs prennent en compte les index dans leurs exécutions ou bien font-ils des scans simples de la table par défaut ?

j'ai eu l'occasion ces derniers jours de mesurer le temps d'exécution d'un curseur C1 défini comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
DECLARE c_classical_query CURSOR FOR SELECT id_ville, taux_crim, temp_ann FROM ville WHERE (pop between 50000 AND 100000) FOR READ ONLY;
J’ai opté pour une stratégie de chargement par bloc. mon fetch ressemble donc à ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
FETCH FORWARD :SIZE_BUFFER_ FROM c_classical_query INTO :row_set;
Où SIZE_BUFFER_ est la taille du block et row_set une structure de données destinée à contenir le bloque retourné.

J’ai d'abord mesuré le temps d'exécution de mon programme écrit en ECPG sans index sur le champ pop, puis avec un index de type b-tree.

À mon grand étonnement, j'ai eu les mêmes temps d'exécution.

J’ai bien vérifié que l'index est pris en compte pour la requête définissant le curseur(SELECT id_ville, ...). Et pourtant, le curseur s'obstine à faire des scans séquentiels malgré l'existence de l'index.

J’ai cherché sur internet des explications, mais rien n'ai fait.

merci d'avance.