求助!如何优化下面的SQL语句?
谁能给优化一下下面的语句,不胜感激,特别是xzpm_user_v表用了3个别名select decode('0', '0', to_char(rownum), '0' || '.' || rownum) NO, t.*
from (selectdecode(substr(n.check_point_type, -1, 1),
'3',
'THREE',
'2',
'TWO') CHECK_LEVEL,
n.PLAN_END_PEOPLE,
n.ACTUAL_START_PEOPLE,
xuv1.USER_NAME PLAN_START_PEOPLE_NAME,
xuv2.USER_NAME PLAN_END_PEOPLE_NAME,
xuv3.USER_NAME ACTUAL_START_PEOPLE_NAME,
nvl(n.parent_struct_id, 0) parent_struct_id,
p.property_name CHECK_LEVEL_NAME,
r.property_name CHECK_type_name,
s.property_name ITEM_TYPE_NAME,
decode(n.attribute5,
null,
xuv1.USER_NAME || '' ||
to_char(n.PLAN_START_TIME, 'yyyy-mm-dd'),
'作废' || n.attribute5 || '' || n.attribute7) SPLAN_START_TIME,
decode(n.attribute5,
null,
xuv2.USER_NAME || '' ||
to_char(n.PLAN_END_TIME, 'yyyy-mm-dd'),
'作废' || n.attribute5 || '' || n.attribute7) SPLAN_END_TIME,
decode(n.attribute5,
null,
xuv3.USER_NAME || '' ||
to_char(n.ACTUAL_START_TIME, 'yyyy-mm-dd'),
'作废' || n.attribute5 || '' || n.attribute7) SACTUAL_START_TIME,
to_char(n.ACTUAL_END_TIME, 'yyyy-mm-dd') SACTUAL_END_TIME,
M.PROPERTY_NAME MAJOR_NAME
from xzpm_zds_opcheck_main n,
(select *
from xzpm_property_instance
where property_type_code = 'CPLEVEL') p,
(select *
from xzpm_property_instance
where property_type_code = 'CPTYPE') r,
(select *
from xzpm_property_instance
where property_type_code = 'ITEMTYPE') S,
(select *
from xzpm_property_instance
where property_type_code = 'EQUSYSTEM') M,
xzpm_user_v xuv1,
xzpm_user_v xuv2,
xzpm_user_v xuv3 where nvl(n.parent_struct_id, 0) = 0
and decode(substr(n.check_point_type, -1, 1),
'3',
'THREE',
'2',
'TWO') = p.property_scode(+)
and upper(substr(n.check_point_type, 1, 1)) = r.property_scode(+)
and n.ITEM_TYPE = S.property_scode(+)
AND N.CHECK_MAJOR = M.PROPERTY_SCODE(+)
and N.PLAN_START_PEOPLE = xuv1.USER_CODE(+)
and N.PLAN_END_PEOPLE = xuv2.USER_CODE(+)
and N.ACTUAL_START_PEOPLE = xuv3.USER_CODE(+)
order by sort_num) t 把执行计划贴出来 请下次提此类问题时提供以下信息
1 程序运行时长
2 各表结构 尤其是索引信息
3 执行计划!
针对目前SQL文本 我提供以下优化思路
1 查看xzpm_user_v 表xzpm_user_v 列USER_CODE 是否有索引
2 查看关联方式,如关联方式不佳可以使用标量子查询 select (select )替代
3 (select *
from xzpm_property_instance
where property_type_code = 'CPLEVEL') p,
(select *
from xzpm_property_instance
where property_type_code = 'CPTYPE') r,
(select *
from xzpm_property_instance
where property_type_code = 'ITEMTYPE') S,
(select *
from xzpm_property_instance
where property_type_code = 'EQUSYSTEM') M,
这段程序需要了解业务需要,有一定的合并可能行~
oraunix 发表于 2012-5-11 14:05 static/image/common/back.gif
把执行计划贴出来
索引为 :UK_XZPM_CHECK_MAIN unique (STRUCT_ID, PLAN_ZX_CODE)、PK_XZPM_CHECK_MAIN primary key (ID)
XZPM_CHECK_MAIN 为主票
xzpm_property_instance为属性表
xzpm_user_v为人员表
xzpm_property_instance表中存着property_name、property_code、CHECK_type_name,对于不同的CHECK_type_name对应的property_code值在XZPM_CHECK_MAIN 主票中存于不同的字段,对主票查询结果要显示property_name
执行计划为:
表A中有字段a1(部门代码)、a2(单位代码)、a3(专业代码)
表B中有b1(名称)、b2(代码)、b3(类型,如部门、单位、专业)
目的是显示表A记录中对应的名称
执行最快的查询语句怎么写 remote ? 你用DBLINK了吧? 甲骨论-晨曦说的对,是用DBLINK了 目前还不清楚瓶颈在哪里。不过本身DBlink就不快。可以单独访问下dblink的表。
可以将主表与视图xzpm_user_v xuv1,关联,看看效果~
目前执行计划
1 涉及Dblink
2 table access full 操作较多。
本帖最后由 shenyan 于 2012-5-11 23:33 编辑
把远程表在本地复制一份,看看性能能差多少 ?
页:
[1]