bonjours à toutes et tous,
sur une table de plus de cent (107 pour être exact en ce moment) millions d'enregistrements composée pour l'essentiel de: numero number(4), article number(10), groupe number(2), infos number(10), ...
je fais:réponse instantanée, normal, j'ai un index sur numero, article et groupe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 select numero, groupe, sum(infos) from matable where numero between 10 and 20 and article = 100 group by numero, groupe
mais:
là, il faut bien 1 à 3 secondes pour obtenir la réponse. le premier réflèxe que j'ai eu et de créer un index: blabla( "numero" desc, article )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 select t.numero, t.groupe, sum(t.infos) from matable t where t.numero = ( select max( t2.numero ) from matable t2 where t2.numero < t.numero and t2.article = t.article ) and t.article = 100 group by t.numero, t.groupe
en me disant comme je cherche en fait le total précédent (donc en descendant) cela devrait booster la chose, mais non.
il faut savoir que la table (environ 7 gigas) et dans un tablespace dédié et les index dans un autre tablespace.
donc, je me plante dans mes index, puisque lorsque je cherche à faire la somme sur un "numero" précis j'ai je résultat instantanément (si si!) et lorsque je recherche le numéro qui précéde le numero en cours "select max(numero)... where numero < numero and article = 100" là, c'est très long (1 à 2 secondes, rigolez pas!)
la question est donc quel index créer pour que la recherche "arrière" donne un résultat plus rapide à ce type de requête?
merci de votre aide.
Partager