oracle中如何让exists中的group by 更快些

像这样在exists中又写了一个group by,但是很慢,谁能给优化下或者改进下。
select * from tcf_bill_after_t d
where perserve03 is null
and exists(
select a.account_idnew
from
(
select FEE_KIND,ACCOUNT_ID,USER_ID,sum(fee1+fee2+fee3+fee4+fee11+fee12+fee13+fee14) fee
from bf_bill_t_before
group by ACCOUNT_ID,USER_ID,FEE_KIND
) a
where a.fee<0
and d.PERSERVE01 ='old'
and a.account_id = d.account_idnew
and a.perserve02='0'

)
and table_source=1
and city_code in('0411','0427')
;

这样试试 别用exists了

select d.* from tcf_bill_after_t d,(
select a.account_idnew
from
(
select FEE_KIND,ACCOUNT_ID,USER_ID,sum(fee1+fee2+fee3+fee4+fee11+fee12+fee13+fee14) fee
from bf_bill_t_before
group by ACCOUNT_ID,USER_ID,FEE_KIND
) a
where a.fee<0
and d.PERSERVE01 ='old'
and a.account_id = d.account_idnew
and a.perserve02='0'
) x

where perserve03 is null and d.account_id = x.account_idnew
and existsand table_source=1
and city_code in('0411','0427')
;
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-01
加几个索引吧,和exists关系不大
第2个回答  2011-11-01
视乎没有必要求和吧 exist 是判断存在而已

oracle中如何让exists中的group by 更快些
这一段可以放到子查询中 (2) perserve03 is null 放到最后

oracle如何提高大数据group by 的效率
设一些参数 或者 调整执行计划,见下面的语句:-- Script Tested above 10g -- Create a new temporary segment tablespace specifically for creating the index.-- CREATE TEMPORARY TABLESPACE tempindex tempfile 'filename' SIZE 20G ;-- ALTER USER username TEMPORARY TABLESPACE tempindex...

oracle group by 性能优化
(非oracle中)on、where、having这三个都可以加条件的子句中,on是最先执行,where次之,having最后,因为on是先把不符合条件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据,按理说应该速度是最快的,where也应该比having快点的,因为它过滤数据后才进行sum,在两个表联接时才用on的,所以在一个表的时候,就...

Oracle 中left join,where,group by的用法
分组(GROUP BY)用于将结果集中的行按一个或多个列进行分组。在示例查询中,GROUP BY子句用于指定按表_2的n2列进行分组。这允许我们对每个组执行聚合函数,如计算每个组的总和、平均值或计数等。将上述部分组合,完整的查询语句如下:SELECT table_1.n1,table_2.n1,function(table_1.n2) FROM tabl...

oracle里group by 和having count的问题
--1,查询hm有重复的记录select hm,count(*) from a group by hm having count(*)>1--2,查询hm和xm都有重复select hm,xm count(*) from a group by hm,xm having count(*)>1

sql中case和group by一起用的一个问题
WHEN country='日本' THEN'亚洲' WHEN country='美国' THEN'北美洲' WHEN country='加拿大' THEN'北美洲' WHEN country='墨西哥' THEN'北美洲' ELSE'其他'END) ttFROM testGROUP BY CASE WHEN country='中国' THEN'亚洲' WHEN country='印度' THEN'亚洲...

oracle的exist和group by同时出现时,如何使用,举一个例子
exist是筛选用的 group by分组统计用的 比如 select gid, count(*) as cnt from mytable where exist(select 1 from mytable2 where gid=mytable2.id)group by gid

oracle中group by用法
1,在select 语句中可以使用group by 子句将行划分成较小的组,一旦使用分组后select操作的对象变为各个分组后的数据,使用聚组函数返回的是每一个组的汇总信息。使用having子句限制返回的结果集。group by 子句可以将查询结果分组,并返回行的汇总信息Oracle 按照group by 子句中指定的表达式的值分组查询...

oracle中,还是不甚明白order by和group by的用法
首先用group by 的前提是你的select里边用了聚合函数如sum(),avg(),min(),max()没有聚合函数用不了group by会报错 其次 出现在select里边的除聚合函数以外的所有字段 都必须作为group by的条件 出现在group by中的字段可以不select出来 也就是说 select中的字段必须出现在group by中 group by中的...

关于分组查询的问题GROUP BY,不能用rownum
GROUP BY 员工编号, 日期1)看你这个应该是ORACLE,是取得日期最小的对应的时间最大记录吧,如果这样的话,可以这样写 找出日期最小的记录。...SELECT 员工编号, 日期1, 日期2 FROM TAB t1 WHERE NOT EXISTS (SELECT 1 FROM tab WHERE t1.员工编号 = 员工编号 AND t1.日期1 > 日期1 然后按照...

相似回答
大家正在搜