请求高手优化sql查询速度!!!!! 不分组查询很快,分组后超慢,求解决方法

selectt.fund_acct_id,t.fund_id,t.capital_id,t.org_id,max(t.cur_date)asdtfrom(select/*... select t.fund_acct_id,
t.fund_id,
t.capital_id,
t.org_id,
max(t.cur_date) as dt
from (select /*+ USE_CONCAT */
t3.fund_acct_id,
t3.fund_id,
t3.cur_date,
t3.capital_id,
t3.org_id,
t3.fund_balance,
t3.freeze_balance,
t3.UnFootIncome,
t3.ADDUPINCOME
from fund_balance t3,
(select vc_fundaccount,
trim(c_fundcode) c_fundcode,
VC_AGENTNO,
to_char(t.D_LASTMODDATE,
'yyyymmdd') cur_date,
VC_TRADENO
from dc_staticshares t
where t.D_LASTMODDATE >
to_date('2010-04-20',
'yyyy-mm-dd')
and nvl(t.f_currentshares, 0) +
nvl(t.f_frozenshares, 0) > 0) t4
Where t3.cur_date <= '20100420'
and t3.fund_acct_id = t4.vc_fundaccount
and t3.fund_id = t4.c_fundcode
and t3.capital_id = t4.vc_tradeno
and t3.org_id = t4.VC_AGENTNO) t
group by t.fund_acct_id,
t.fund_id,
t.capital_id,
t.org_id
展开
 我来答
lyd963
2011-04-18 · 超过30用户采纳过TA的回答
知道答主
回答量:86
采纳率:0%
帮助的人:75.8万
展开全部
如果是海量数据,那速度是很可怕,知道大概有几年的数据吗?你是不是可以尝试只查询一个月的数据,然后将结果放在临时表里,再循环这个查询时间,比如我把2010年1月、2月、3月、4月份的结果用循环查找出来,放到临时表tbl1,然后再从临时表中进行分组,这样效率可能会高一点。
你可能需要尝试一下时间长度为多少时,效率最高,是一个星期一个星期的查,一个月一个月的查,还是三个月,半年,一年。。。。。。。

另外,不知道表dc_staticshares 的数据重复的多吗?多的话应先考虑将重复数据过滤掉,不然也是影响速度的。
更多追问追答
追问
dc_staticshares这个表是一个存放最新持仓情况的表,重复的不是很多,那种情况是该用户买了多支基金的情况。并且,我所查询的时间段是——是用户选择需要的日期,到这个日期为止的一个数据情况
追答
那么可以根据用户选的时间段来拆分查询,如果时间跨度很长的话。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
柚鸥ASO
2024-03-16 广告
在ASO优化过程中,确定关键词的一般步骤如下:1. 确定有效关键词:首先需要了解目标市场的热度,过滤掉低热度的关键词,例如搜索次数小于4605的词,因为平均一天只有一次搜索。这些低热度的词大部分是关键词覆盖的长尾搜索词,无需过多关注。2. ... 点击进入详情页
本回答由柚鸥ASO提供
zm2811
2011-04-18 · TA获得超过155个赞
知道小有建树答主
回答量:87
采纳率:0%
帮助的人:109万
展开全部
1.VC_FUNDACCOUNT 和 FUND_BALANCE 为什么不能直接连接查询?
2.你求max() 是需要按 你group by的条件来进行分组吗?还是只是要查询除最大的那个时间就行?
3.是oralce数据库吗?如果是的话,最外层的group by 可以改写成oralce的分析函数。
row_number() over(order by CUR_DATE desc) row_num
然后在外面嵌套一层查询,查询row_num = 1的。
追问
大侠,您可能看错了,主要是dc_staticshares与fund_balance相关的查询。我主要是按group by 的条件进行分组并查到它的最大的时间对应的数据。您能直接帮我修改一下吗?我不太会。很急的。万分感谢
追答
1.是拷错表名了,是DC_STATICSHARES和FUND_BALANCE,这两个表应该可以连接查询吧。
你T4的结果集只是从 DC_STATICSHARES查询数据,完了才跟 FUND_BALANCE 进行关联的吧?
2.还是没明白,你到底是想分组查询,还是只是找到最大的时间的那行数据?
如果你是想分组,这个是没有办法把group by 去掉的。
3.既然是大表,为什么不建索引呢?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
南通通德DBA
2011-04-18 · 超过36用户采纳过TA的回答
知道答主
回答量:129
采纳率:0%
帮助的人:87.9万
展开全部
执行计划是啥呀
COST还是Rule?
更多追问追答
追问
可不可以不涉及到修改它的执行计划,而从语句及索引等处入手,因为主机的配置不能随便更改,谢谢!!!!
追答
基于cost那就需要你每个表的统计信息,还有这个SQL的执行计划

表结构啥的也要给我看看,哪些有索引那些没索引我也不知道也
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式