2016-12-17 197 views
1

我有一个表名x,它包含week-no,其中星期数的数据类型是varchar2,它在22秒内获取max(week-no)。 我需要获取,最大周没有 排我想这下面的查询:oracle中max函数的查询优化

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

请帮助和建议,可以花费较少的时间查询。

回答

2

首先,创建函数索引:

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

我认为Oracle应该足够聪明地使用索引的查询。如果没有,你可以尝试:

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; 

我还要指出的是,如果你是存储数量为字符串,那么你应该用零(因此“01”,“02”垫它等)。在这种情况下,您可以直接在列上使用max(week_no)和索引。