现在简单的SQL一句,由于数据量过大,而一直处于运行状态,无法显示最终结果,哪位可以指教下,帮忙解答
select substr(busi_date,1,6),orgid,brhid,operway_0, count(operway_0), sum(matchamt)  
              from  his_hx_orderrec where substr(busi_date,1,6) = busi_date group by substr(busi_date,1,6),orgid,brhid,operway_0;
如果直接SELECT * FROM  his_hx_orderrec 只需要0.6秒就能检索出结果
SELECT * FROM  his_hx_orderrec where substr(busi_date,1,6), = '200906' 这样一加就无法显示了,一直运行中,但奇怪的是如果后面的检索条件的值='200907'时,结果就能显示出来,只是等待时间会久点,其它条件则不能。。
加上另两个聚合函数和GROUP BY更加是显示不了,单独加GROUP BY不加其它也同样!!望高手指点下。。应怎么处理,!!

解决方案 »

  1.   

    substr(busi_date,1,6), = '200906' 不是MS-SQL吧
      

  2.   

    select substr(busi_date,1,6),orgid,brhid,operway_0, count(operway_0), sum(matchamt)  
    from  his_hx_orderrec 
    where substr(busi_date,1,6) = busi_date 
    group by substr(busi_date,1,6),orgid,brhid,operway_0; 你的语句没错,是oracle的吧?不过你的条件substr(busi_date,1,6) = busi_date 是否正确?
    如果是这个条件,不如改为:length(busi_date) = 6
      

  3.   

    因为使用到substr时,针对busi_date的索引也许失效.
      

  4.   

    语句为ORCLE ,,语句是正确的。。现在问题是这是张历史数据表,数据量大。。busi_date在数据库里为八位的,,我现在截了六位的排序,,而且问题不出在这里,,我上面说的直接后面加WHERE 都只有七月的能运行,,八月的不能运行!!不知道原因SQL语句是没问题的。因为有一张对应一样结构的表,为当前月所有数据的,同样的语句,在那张表里是可以运行的,但放到历史表中,我认为是数据量过大,而导致一直处于执行状态,不出结果!!
      

  5.   

    substr(busi_date,1,6) = busi_datebusi_date 为传进的参数,没有问题的。。写的是存储过程,因为运行不了,所以把它拿出来自己跑SQL,
    如:substr(busi_date,1,6), = '200906' 一加WHERE和GROUP BY 就运行不出结果了。。去掉直接SELECT * 是能马上检索出结果的
      

  6.   

    busi_date是字符型,还是日期型?
      

  7.   

    busi_date 是INT型的,,
    不是这方面的问题。上面说的,库里有张hx_orderrec和his_hx_orderrec一样的表,只是his_hx_orderrec存放的是所有历史记录都包括,所以数据量大的问题,同样的SQL把表名换成hx_orderrec是可以运行的。。
    因为his_hx_orderrec里的数据量太大,所以一加WHERE和GROUP BY 就一直处于执行状态,等了很久也显示不出结果,望高手解答,,,!!!