ITPub博客

首页 > 数据库 > 数据库开发技术 > 访问视图没有走基本表索引

访问视图没有走基本表索引

原创 数据库开发技术 作者:dhcwenora 时间:2007-09-28 10:02:47 0 删除 编辑

开发人员报告:有如下的sql性能差:

select rowid,PKG_LIFE_QUERY_FUNC.F_GET_DEPOSIT_ACCOUNT_VALUE(DEPOSIT_ID,ACCOUNT_CODE) as ACCOUNT_VALUE,PKG_LIFE_QUERY_FUNC.F_GET_DEPOSIT_ACCOUNT_VALUE(DEPOSIT_ID,ACCOUNT_CODE) as ACCOUNT_VALUE,a.* from V_CUST_DEPOSIT_LIST a where ( account_code='27902')

V_CUST_DEPOSIT_LIST 是一个视图如下:

create or replace view v_cust_deposit_list as
select row_number() over(order by tcdl.account_code,
trunc(tcdl.deposit_date), to_number(decode(tcd.distri_type,
'1', 1, '2', 5, '3', decode(tpf.fee_type, 169, 2, 69, 6),
'10', 3, '71', 4, '8', 9, 8))) rn,tcdl.*
from t_cust_deposit_list tcdl,
t_capital_distribute tcd,
t_product_fee tpf
where tcdl.capital_id = tcd.capital_id(+)
and tcd.prem_id = tpf.list_id(+)
order by tcdl.account_code,
trunc(tcdl.deposit_date),
to_number(decode(tcd.distri_type,'1',1,'2',5,'3',
decode(tpf.fee_type, 169, 2, 69, 6),'10',3,'71',4,'8',9,8));

在t_cust_deposit_list有account_code;

原因:由于在视图上含有row_number分析函数,所以没法走索引:把语句改为:

select rowid,
PKG_LIFE_QUERY_FUNC.F_GET_DEPOSIT_ACCOUNT_VALUE(DEPOSIT_ID,ACCOUNT_CODE) as ACCOUNT_VALUE,
PKG_LIFE_QUERY_FUNC.F_GET_DEPOSIT_ACCOUNT_VALUE(DEPOSIT_ID,ACCOUNT_CODE) as ACCOUNT_VALUE,
a.*
from (
select row_number() over (order by tcdl.account_code,trunc(tcdl.deposit_date),to_number(decode(tcd.distri_type,
'1',1,'3',decode(tpf.fee_type,169,2,69,5),'10',3,'71',4,'2',9,8))) rn,tcdl.*
from
(select tcd2.* from t_cust_deposit_list tcd2
where tcd2.account_code=
'27902') tcdl,t_capital_distribute tcd,t_product_fee tpf
where tcdl.capital_id = tcd.capital_id(+) and tcd.prem_id = tpf.list_id(+)
order by tcdl.account_code,trunc(tcdl.deposit_date),to_number(decode(tcd.distri_type,
'1',1,'3',decode(tpf.fee_type,169,2,69,5),'10',3,'71',4,'2',9,8))
) a

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8202193/viewspace-973154/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-03-04

  • 博文量
    6
  • 访问量
    37908