oracle数据库优化,访问oracle视图数据很慢

 

create or replace package body PKG_ATF as

  procedure GetZYWardList(s_date     in varchar2, --开始时间
                          e_date     in varchar2, --结束时间
                          group_no   in varchar2, --库房编号
                          page_type  in varchar2, --处方类型列表
                          b_data     out r_recordset --返回的数据集
                         ) is
  begin
    open b_data for
      select distinct --a.ordered_by as "编码"
             b.ward_code as "编码",b.ward_name as "病区名称"
        from drug_dispense_rec a,view_his_ward_dict b
       where a.ordered_by = b.dept_code
         --and c.ward_code  = b.dept_code
         and a.dispensing_date_time >=to_date(s_date,'yyyy-mm-dd')
         and a.dispensing_date_time <=to_date(e_date,'yyyy-mm-dd')
         and a.dispensary = '0803'  --库房编号
         --and a.CHARGE_INDICATOR='1' --已经计价
        order by b.ward_name;
  end GetZYWardList;

一天的数据量也就4000-5000条,但是取数据时很慢,通过sql2008通过oracle客户端访问oracle的视图取数据

单从语句上看,日期写成between and是否好点?

用普通视图有个缺点,来源表里建的索引失去作用了,如果来源表里的数据量大,建议不用视图直接取表,或者把视图改成物化视图,充分利用出索引的优点

视图里不要出现order by,在视图外order by

 

create index for ward_code column in table DEPT_VS_WARD  & dept_code column in table DEPT_DICT;
2, create index for ordered_by column in table drug_dispense_rec;
3, create or replace package body PKG_ATF as

  procedure GetZYWardList(s_date     in varchar2, --开始时间
                          e_date     in varchar2, --结束时间
                          group_no   in varchar2, --库房编号
                          page_type  in varchar2, --处方类型列表
                          b_data     out r_recordset --返回的数据集
                         ) is
  begin
    open b_data for
      select distinct --a.ordered_by as "编码"
             b.ward_code as "编码",replace(c.dept_name,'护理单元','') as "病区名称"
        from drug_dispense_rec a,DEPT_VS_WARD b,DEPT_DICT c
       where a.ordered_by = b.dept_code
         and c.ward_code  = b.dept_code
         and a.dispensing_date_time >=to_date(s_date,'yyyy-mm-dd')
         and a.dispensing_date_time <=to_date(e_date,'yyyy-mm-dd')
         and a.dispensary = '0803'  --库房编号
         --and a.CHARGE_INDICATOR='1' --已经计价
        order by b.ward_name;
  end GetZYWardList;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值