Oracle如何实现利用实体化视图提高查询性能

实体化视图不仅可以作为远程复制查询的功用,而且能够提高复杂的统计查询的性能.
1.创建查询语句对应的实体化视图. 
SQL> conn sh/sh;
SQL> create materialized view mv_sales
  2  refresh complete
  3  start with sysdate next sysdate+1
  4  as select PROD_ID,Count(PROD_ID) from sales group by PROD_ID;
    
2.该视图是Enabled Query Rewrite,如果不是,
  运行下面的命令
  Alter Materialized View mv_sales enable query rewrite;
3.参数query_rewrite_enabled 值是true. 你可以在参数里设置,或者会话级设置
  Alter session set query_rewrite_enabled = true;

4.第四个也是最容易被忽略的,那就是optimizer_mode,不能是rule或者choose(在Oracle9i里这个值缺省是choose)
  Alter session set  optimizer_mode = true;   

如果你还是发现你的查询很慢,你可以进行以下诊断:
declare
 varQUERY VARCHAR2(200);
 varMV VARCHAR2(50);
 varSTATEMENT_ID VARCHAR2(10);
begin
 varQUERY:= 'select PROD_ID,Count(PROD_ID) from sales group by PROD_ID'; --查询语句
 varMV:= 'MV_SALES';  --相应的实体化视图名称
 varSTATEMENT_ID:= 'hello'; --语句ID
 DBMS_MVIEW.EXPLAIN_REWRITE(QUERY=>varQUERY,MV=>varMV,STATEMENT_ID=>varSTATEMENT_ID);
end;

如果执行上面的命令报告以下错误:ORA-30380 REWRITE_TABLE does not exist.
则先 Create it using the ORACLE_HOME\rdbms\admin\utlxrw.sql script after connecting to the desired schema.
然后查询 原因:select * from rewrite_table;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值