SQL语句加上WHERE和GROUP BY无法执行

时间:2021-11-01 21:26:13
现在简单的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不加其它也同样!!

望高手指点下。。应怎么处理,!!

11 个解决方案

#1


是ms-sql吗?

#2


substr(busi_date,1,6), = '200906' 

不是MS-SQL吧

#3


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

#4


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

#5


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

#6


substr(busi_date,1,6) = busi_date

busi_date 为传进的参数,没有问题的。。写的是存储过程,因为运行不了,所以把它拿出来自己跑SQL,
如:substr(busi_date,1,6), = '200906' 

一加WHERE和GROUP BY 就运行不出结果了。。去掉直接SELECT * 是能马上检索出结果的

#7


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

#8


该回复于2010-07-28 09:32:48被版主删除

#9


直觉是数据问题。

#10


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

#11


没人能解答吗?这张表有70G的数据量。。

#1


是ms-sql吗?

#2


substr(busi_date,1,6), = '200906' 

不是MS-SQL吧

#3


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

#4


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

#5


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

#6


substr(busi_date,1,6) = busi_date

busi_date 为传进的参数,没有问题的。。写的是存储过程,因为运行不了,所以把它拿出来自己跑SQL,
如:substr(busi_date,1,6), = '200906' 

一加WHERE和GROUP BY 就运行不出结果了。。去掉直接SELECT * 是能马上检索出结果的

#7


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

#8


该回复于2010-07-28 09:32:48被版主删除

#9


直觉是数据问题。

#10


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

#11


没人能解答吗?这张表有70G的数据量。。