Oracle查询响应速度慢,使用函数

时间:2014-07-29 19:31:54

标签: sql oracle query-performance

我有下一个查询:

SELECT to_char(xa_time_cnv.utc_to_loc(UTCTIME),'DD-MM-YYYY HH24:MI:SS'),  
                    +
                    ROUND(VALOR_INST,2),  
                    +
                    ge_pkt_conv_funcs.f_convert_tlq(TLQ_INST),  
                    +
                    ROUND(VALOR_PROM,2),  +
                    ge_pkt_conv_funcs.f_convert_tlq(TLQ_PROM),  
                    +
                    ROUND(VALOR_MAX,2),  +
                    ge_pkt_conv_funcs.f_convert_tlq(TLQ_MAX),  
                    +
                    to_char(xa_time_cnv.utc_to_loc(UTCTIME_MAX),'DD-MM-YYYY HH24:MI:SS'), 
                    +
                    ROUND(VALOR_MIN,2), 
                    +
                    ge_pkt_conv_funcs.f_convert_tlq(TLQ_MIN),  
                    +
                    to_char(xa_time_cnv.utc_to_loc(UTCTIME_MIN),'DD-MM-YYYY HH24:MI:SS')  
                    FROM  a_5min_033 
             WHERE utctime >= xa_time_cnv.loc_to_utc(TO_DATE('27/06/2014 00:00:00','DD-MM-YYYY HH24:MI:SS'),null) 
             AND   utctime <= xa_time_cnv.loc_to_utc(TO_DATE('28/06/2014 00:00:00','DD-MM-YYYY HH24:MI:SS') + 8/24,null) 
             AND   POINTNUMBER =  330000 
             ORDER BY utctime;

第一次在返回记录后运行:

经过时间:00:00:30.87

然后,在第二次运行(缓存中的查询):

经过时间:00:00:01.17

我尝试过分组,但没有结果:

GROUP BY utctime, valor_inst, tlq_inst, valor_prom, tlq_prom, valor_max, tlq_max, utctime_max, valor_min, tlq_min, utctime_min

a_5min_033有3百万行,aprox。

我想第一次改进回应。

你能告诉我如何获得更好的表现吗?

在附件中,我发送创建表索引的脚本。

1 个答案:

答案 0 :(得分:1)

我首先要在(POINTNUMBER, utctime)上创建一个索引:

create index idx_a_5min_033_pointnumber_utctime on a_5min_033(POINTNUMBER, utctime);

最初的额外时间可能是将数据加载到内存中。时机表明查询正在进行全表扫描。请注意,这是猜测。要真正理解执行路径,您需要使用explain plan或类似功能。