Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

84

积分

1

好友

27

主题
1#
发表于 2012-8-22 11:46:54 | 查看: 3659| 回复: 7
select sum(t.reg_adj_amt_lcy)
  from gltab_dm t
where t.data_date =datacore.date_holiday('2012-08-19')
   and t.item_code = '2-9901-00027-1'
   and t.product_code in ('FD', 'CD')
   and (t.br_code < '0272'or t.br_code > '0272') ;
这样的SQL语句,执行计划中 是走全表扫描的,原因是datacore.date_holiday 函数会在每一行传回一个值。怎样改写?
求答案!!!
2#
发表于 2012-8-22 13:50:39
不理解你说的 datacore.date_holiday   到底做了什么

回复 只看该作者 道具 举报

3#
发表于 2012-8-22 16:36:29
  1. decalre
  2. var_func number;
  3. begin
  4. var_func=datacore.date_holiday('2012-08-19');
  5. ....
  6. end;
复制代码

这个函数不就是返回一个值吗?考虑下首先取出来不就好了

回复 只看该作者 道具 举报

4#
发表于 2012-8-22 21:36:13

回复 2# 的帖子

是一个关于节假日判断的函数:输入一个日期,判断此日期最近的工作日。如:2012.08.19 则返回 2012.08.17
是我表达有误。
不知道为什么 SQL语句这样写他就不走索引,导致运行时间很长2分钟左右。
改成嵌套子查询 把where t.data_date =datacore.date_holiday('2012-08-19') 放最后  就走索引了。运行时间不到1秒。

回复 只看该作者 道具 举报

5#
发表于 2012-9-27 09:39:23
oracle对自定义函数的支持很差,这算不算bug

回复 只看该作者 道具 举报

6#
发表于 2012-12-10 15:15:54
那能不能考虑做成函数索引?

回复 只看该作者 道具 举报

7#
发表于 2012-12-26 14:02:01
背向天堂 发表于 2012-12-10 15:15
那能不能考虑做成函数索引?

函数索引与这个两码事儿

回复 只看该作者 道具 举报

8#
发表于 2012-12-26 15:43:37
走全表扫描的原因是 sum(t.reg_adj_amt_lcy)

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 04:31 , Processed in 0.049129 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569