2016-12-17 1 views
1

J'ai un nom de table x qui contient semaine-no où le type de données du numéro de semaine est varchar2 qui récupère max (semaine-no) en 22 secondes. Je besoin d'aller chercher rangée avec une semaine sans max J'ai essayé ci-dessous requête:optimisation de requête pour la fonction max dans oracle

select max(to_number(week-no)) 
from x; 

s'il vous plaît aider et suggérer la requête qui peut prendre moins de temps.

Répondre

2

D'abord, créer un index fonctionnel:

create index x_weekno_num on x(to_number(week_no)); 

Je pense que Oracle devrait être assez intelligent pour utiliser l'index pour votre requête. Sinon, vous pouvez essayer:

select week_no_num 
from (select to_number(week_no) as week_no_num 
     from x 
     order by to_number(week_no) desc 
    ) x 
where rownum = 1; 

Je tiens également à souligner que si vous enregistrez le numéro comme une chaîne de caractères, alors vous devriez pad avec des zéros (donc « 01 », « 02 » et ainsi de suite). Dans ce cas, vous pouvez simplement utiliser max(week_no) et un index directement sur la colonne.