首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux数据库>oracle>正文

视图上含有row_number分析函数没法走索引

http://www.oklinux.cn  2008-03-10  来源: 赛迪网 Alice  会员收藏  游客收藏  【 】 

问题:有如下的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


上一篇:Linux自动备份MySQL数据库的实用方法   下一篇:如何调整"Oracle"数据库服务器的性能


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·Linux自动备份MySQL数据库的实用方法
·如何调整"Oracle"数据库服务器的性能
·教你快速掌握如何使用"Opatch"打补丁
·pl/sql developer中TIMESTAMP的显示格式
·探讨基于不绑定变量与绑定变量的柱状图作用
·讲解V$Datafile_Header相关字段的使用
·带你深入了解Oracle数据库的进制转换
·哪些因素可以影响Oracle数据库的性能
·如何使用Ruby脚本调用Oracle存储过程
·讲解Oracle移动数据文件到新分区的过程
·如何更改rac的vip地址和集群互联地址
·解决不同字符集数据库间的数据同步问题
·怎样将"Oracle"的外部表汉字转换为拼音
·轻松解决Oracle 10g 的em中文乱码问题
·深入讲解redo log file损坏的处理过程
·快速掌握解决ORA-00844错误的实用方法
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·讲解Oracle移动数据文件到新分区的过程
·如何使用Ruby脚本调用Oracle存储过程
·哪些因素可以影响Oracle数据库的性能
·带你深入了解Oracle数据库的进制转换
·讲解V$Datafile_Header相关字段的使用
·探讨基于不绑定变量与绑定变量的柱状图
·pl/sql developer中TIMESTAMP的显示格
·教你快速掌握如何使用"Opatch"打补丁
·如何调整"Oracle"数据库服务器的性能
·Linux自动备份MySQL数据库的实用方法
·如何更改rac的vip地址和集群互联地址
·解决不同字符集数据库间的数据同步问题
  阅读排行
·如何修改遗失的MySQL的ROOT用户密码
·详解远程SHELL下安装配置RedHat ES 5的
·教你如何将MySQL数据库的密码恢复
·教你在MySQL从口令恢复设置的密码
·在 Oracle Enterprise Linux 上升级到
·oracle9i installation on fedora core
·Oracle Instant client介绍
·Oracle高级复制(同步复制)配置步骤详细
·用Oracle归档日志进行恢复的方法
·Linux下的Oracle数据库编程详解
·Linux下Oracle9i RMAN备份及恢复步骤介
·带你轻松接触一些比较常用的sql*plus命
·Oracle的快照复制
·Oracle HA 在Unix上双机环境的安装指南
·Oracle 数据库存储结构简介
网摘收藏: