Bonjour,
je dois créer une application web qui permet de récupérer des enregistrements dans une table.
Cette base possède 4,2 millions d'enregistrements et une trentaine de champs.
Les critères de recherches sont exclusivement de type radio bouton et checkbox.
De plus, chaque fois qu'un critère est choisi (ou modifié), un comptage automatique du nombre d'enregistrement est mis à jour.
Le but pour l'instant avant d'avancer dans le projet est de trouver le moyen le plus rapide pour arriver à récupérer le nombre d'enregistrement.
Pour l'instant, la solution qu'on est en train de tester consiste à créer un champs 'filtre' dans la base qui est une chaine de caractère qui sera une sorte de filtre. Par exemple, comme critère, on a :
- email : oui (1) ou non (0);
- téléphone : oui (1) ou non (0);
- age : de 0 à 9 ans (0) , de 10 à 19 ans (1), de 20 à 29 ans (2), etc
donc, si un enregistrement possède un email, pas de téléphone et l'age est de 15, la valeur du filtre est : 101
Un index sur filtre a été créé.
Donc, par exemple pour trouver le nombre d'enregistrements qui ont un email et dont l'age est de 21 ans, on utilise la requête suivante :
Le problème, c'est que le l'index sur filtre n'est pas utilisé et la requête met 163 secondes pour retourner un résultat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT count(*) FROM ma_table WHERE regexp_LIKE(filtre,'^1(0|1){1}2$')
Je viens vous demander de l'aide pour savoir comment on peut utiliser l'index sur filtre.
Sinon, peut être que quelqu'un aura une autre méthode.
Merci d'avance
Petite précision :
J'utilise Oracle 10.2.0.3
Partager