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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top