数据库表定义如下:
ELU_Traffic_Day(moname varchar(20), period datetime, st1 number(8),st2 number(8),...st51 number(8)).
运行如下查询:
select moname, sum(st1), sum(st2),...,sum(st15)
from elu_traffic_day
group by moname
运行时间大概在7秒左右。但如果增加一个字段,
select moname, sum(st1), sum(st2),...,sum(st15),sum(st16)
from elu_traffic_day
group by moname
运行时间则骤然上升为20秒左右。百思不得其解,为什么查询增加一个字段效率会下降这么多?st1到st51的字段定义完全一样啊。
还请高手指点迷经,在此谢先。

解决方案 »

  1.   

    你看下explain plan的分析结果
    还有从V$SQL视图中找下所执行的sql的具体情况
      

  2.   

    moname是索引吗,如果不是会慢。
    但是你的数据库需要20秒,多少数据啊。
    还有,就是数据库配置的问题了,你sql语句不复杂。
      

  3.   

    你的表有多大啊?
    用explain plan分析一下,看看cost。
      

  4.   

    很奇怪的是选择14个字段和15个字段查询时间几乎是一样的,选择16个字段就上升2倍多,而且选择16个字段和选择20多个字段查询所花的时间也几乎一样。
    表里数据量不大,只有24万多条记录。moname不是索引。
      

  5.   

    moname 建立索引先,
    这或是关系到每个记录占用的数据块问题,加上一个sum(st16)后,执行sql语句的时候oracle需要多读一个块了,更慢了,而再添加的时也没有读更多的块,所以还是差不多速度。
      

  6.   

    该sql本来就需要取表所有记录,建索引反而更慢