这个查询的目的是希望是能够实现分页查询,但是根据执行计划 ,如果查询的上限数是800,后续参与计算的基数就是799 而不是49,这个将查询的上限数上调到190000 ,则后续参与计算的基数就是189950,我觉得这样严重影响sql的执行性能sql的代码如下 :
with material_a as
(select *
from (select row_.*, rownum rownum_
from t_sap_material row_
where rownum < 800
order by row_.material_info_id)
where rownum_ > 750),
factory_a as
(select materail_id,
listagg(factory, ',') within GROUP(order by factory) factory_list
from (select distinct ma.materail_id, ma.factory
from t_sap_material_factory_map ma inner join material_a m_a on m_a.material_info_id = ma.materail_id)
group by materail_id),
org_a as
(select material_info_id,
listagg(organization_id, ',') within GROUP(order by organization_id) org_list
from (select distinct material_info_id,organization_id from (select m.material_info_id,m.organization_id
from t_sap_materal_sale_map m where m.material_info_id in (select m_a.material_info_id from material_a m_a)
))
group by material_info_id)
select k.*, fa.factory_list, oa.org_list
from material_a k
left join factory_a fa
on fa.materail_id = k.material_info_id
left join org_a oa
on oa.material_info_id = k.material_info_id
这个将分页的上限数上调到190000 ,则后续参与计算的基数就是189950 如下with material_a as
(select *
from (select row_.*, rownum rownum_
from t_sap_material row_
where rownum < 190000
order by row_.material_info_id)
where rownum_ > 189950),
factory_a as
(select materail_id,
listagg(factory, ',') within GROUP(order by factory) factory_list
from (select distinct ma.materail_id, ma.factory
from t_sap_material_factory_map ma inner join material_a m_a on m_a.material_info_id = ma.materail_id)
group by materail_id),
org_a as
(select material_info_id,
listagg(organization_id, ',') within GROUP(order by organization_id) org_list
from (select distinct material_info_id,organization_id from (select m.material_info_id,m.organization_id
from t_sap_materal_sale_map m where m.material_info_id in (select m_a.material_info_id from material_a m_a)
))
group by material_info_id)
select k.*, fa.factory_list, oa.org_list
from material_a k
left join factory_a fa
on fa.materail_id = k.material_info_id
left join org_a oa
on oa.material_info_id = k.material_info_id我觉得这样严重影响sql的执行性能,但我不知道这是不是这个sql优化的重点,请教各位怎么能能更好的优化这个sql?
with material_a as
(select *
from (select row_.*, rownum rownum_
from t_sap_material row_
where rownum < 800
order by row_.material_info_id)
where rownum_ > 750),
factory_a as
(select materail_id,
listagg(factory, ',') within GROUP(order by factory) factory_list
from (select distinct ma.materail_id, ma.factory
from t_sap_material_factory_map ma inner join material_a m_a on m_a.material_info_id = ma.materail_id)
group by materail_id),
org_a as
(select material_info_id,
listagg(organization_id, ',') within GROUP(order by organization_id) org_list
from (select distinct material_info_id,organization_id from (select m.material_info_id,m.organization_id
from t_sap_materal_sale_map m where m.material_info_id in (select m_a.material_info_id from material_a m_a)
))
group by material_info_id)
select k.*, fa.factory_list, oa.org_list
from material_a k
left join factory_a fa
on fa.materail_id = k.material_info_id
left join org_a oa
on oa.material_info_id = k.material_info_id
这个将分页的上限数上调到190000 ,则后续参与计算的基数就是189950 如下with material_a as
(select *
from (select row_.*, rownum rownum_
from t_sap_material row_
where rownum < 190000
order by row_.material_info_id)
where rownum_ > 189950),
factory_a as
(select materail_id,
listagg(factory, ',') within GROUP(order by factory) factory_list
from (select distinct ma.materail_id, ma.factory
from t_sap_material_factory_map ma inner join material_a m_a on m_a.material_info_id = ma.materail_id)
group by materail_id),
org_a as
(select material_info_id,
listagg(organization_id, ',') within GROUP(order by organization_id) org_list
from (select distinct material_info_id,organization_id from (select m.material_info_id,m.organization_id
from t_sap_materal_sale_map m where m.material_info_id in (select m_a.material_info_id from material_a m_a)
))
group by material_info_id)
select k.*, fa.factory_list, oa.org_list
from material_a k
left join factory_a fa
on fa.materail_id = k.material_info_id
left join org_a oa
on oa.material_info_id = k.material_info_id我觉得这样严重影响sql的执行性能,但我不知道这是不是这个sql优化的重点,请教各位怎么能能更好的优化这个sql?
解决方案 »
- oracle 9i 如何查询数据库内存使用情况
- oracle如何导出system用户下创建的表,而不导出系统表
- linux 安装oracle 参数提示PORT的值NULL无效
- 真希望这样的高手能到csdn社区来
- oralce原本两个库只能启动其中一个
- 计算电量得问题?要求在数据库中处理计算逻辑并返回结果
- 请教Oracle中存储过程参数问题
- 请教关于ORACLE动态SQL的问题
- 使用tomcat连接池,JSP无法连oracle8.1.7数据库? 请大家帮忙
- 高级问题,我要用oralce的Corba组件功能,用idl2java命令,系统报jit compiler:symcjit not found
- oracle中如何对指定值显示指定内容
- insert into select的优化
不过你这个还可以优化的,加索引吧。