index sur la question de l'oracle
Question
J'ai la table (MEN) avec 900.000 dossiers.
dans ce tableau j'ai champ IP
et Tdate
.
quand je lance la requête:
select * from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
il prend beaucoup de temps jusqu'à ce que j'obtenir le résultat.
J'essaie de faire l'index comme ceci:
create index
my_in
on
MEN (IP,Tdate );
mais comment exécuter la requête pour obtenir rapidement Résultat?
i essayer ceci:
select My_in from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
et obtenir erreur: ORA-00904
La solution
Vous n'utilisez pas le nom d'index (My_in) dans la sélection. La base de données elle-même comprendre à utiliser l'index. Donc, vous devez simplement faire la même sélection que dans votre premier exemple.
Autres conseils
dans votre requête
select My_in from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
le my_in est le nom de l'index. Si vous voulez forcer l'utilisation d'index, vous pouvez laisser entendre votre requête
select /*+INDEX(My_in MEN) */ * from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
Ce n'est pas valide SQL. My_in
est le nom de votre index.
Essayez de nouveau avec:
select *
from MEN
where IP = '1.1.1.1'
and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY');
Par ailleurs, si vous voulez savoir si le serveur utilisera un plan en utilisant votre index nouvellement créé, vous pouvez contrôler la sortie de la commande explain
:
explain plan for
select *
from MEN
where IP = '1.1.1.1'
and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY');
Jetez un oeil à la documentation d'Oracle sur EXPLIQUER PLAN . Il vous aidera avec cela et beaucoup d'autres optimisations SQL.