ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 物化视图的查询重写(1)

物化视图的查询重写(1)

原创 Linux操作系统 作者:高亚娟 时间:2013-03-04 21:39:25 0 删除 编辑

(1)

查询重写是物化视图的一个很好的优势。查询重写的概念是:把一组用表或者视图表达的SQL语句,转换成用物化视图表示的SQL语句。这种转化对应用是透明的,它可以像索引一样被添加或删除,并且不会影响到应用代码。查询重写技术是Oracle的一项优化技术。

(2)

一个查询是否改写成物化视图的形式,需要考虑一下的几点:

  • 是否启用查询重写的功能
  1. 通过在创建或者修改物化视图的时候,决定每个单独的物化视图是否启用此功能;
  2. 当前的会话,QUERY_REWRITE_ENABLED这个参数是设置为true还是false;
  3. 是否在SQL语句中显示的使用‘REWRITE’或‘NOREWRITE’的提示;
  • 重写的完整性级别
  • 约束

(3)

那么什么时候Oracle会重写一个查询语句呢?
当某些条件被满足的时候,一个语句才能被重写:

  • 查询重写功能必须至少在会话级别被启用;
  • 物化视图必须开启查询重写功能;
  • 重写的完整性级别经过验证,需要允许物化视图的使用。举例:如果query rewrite integrity被设置为ENFORCED,但是此时物化视图没有被刷新,这个时候,物化视图是不能被使用的;
  • 查询结果中所有的或者部分的信息必须可以从物化视图预存储的结果集中得到。

(4)

你想enable查询重写,必须执行以下几步:

  • 每一个涉及到的物化视图必须已经有ENABLE QUERY REWRITE这个子句;
  • 参数QUERY_REWRITE_ENABLED必须设置为true或者force;
  • 必须设置初始化参数OPTIMIZER_MODE为 ALL_ROWS, FIRST_ROWS, or FIRST_ROWS_n,进而启用CBO优化模式
如果在SQL语句中使用到了提示:
  • NOREWRITE提示会忽略掉QUERY_REWRITE_ENABLED的值,一律禁用查询重写特性;
  • 当使用带有物化视图名字的REWRITE提示时,会限定重写时仅使用这些提到的物化视图

(5)

发生了查询重写,那么如何验证确实是发生了呢?

当然,如果一个查询的速度提升了,这可以表名查询重写发生了,但是这个不可以作为证据。可以使用EXPLAIN PLAN语句或者是DBMS_MVIEW.EXPLAIN_REWRITE存储过程进行验证。

DBMS_MVIEW.EXPLAIN_REWRITE这个存储过程对查询重写的一些信息给出建议,比如:查询重写技术对当前的查询是否可用,如果可用的话,那么哪个物化视图被使用到了。如果一个查询不可以重写,那么为什么不可以重写,这个存储过程会给出解释。

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

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

注册时间:2013-01-23

  • 博文量
    3
  • 访问量
    3643