首页 > 其他分享 >【MV】物化视图查询重写

【MV】物化视图查询重写

时间:2024-04-02 17:55:56浏览次数:26  
标签:00 重写 视图 查询 MV ---------- 物化 ora10g

 所谓物化视图查询重写就是,如果初始化参数query_rewrite_enabled设置为TRUE,并且数据库运行在CBO优化模式下,当对基表进行查询时,Oracle会自动判断是否能利用这个基表的所有包含ENABLE QUERY REWRITE关键字的物化视图,如果可以且根据统计信息判断通过查询物化视图代价更小,则Oracle自动重写查询语句,通过查询物化视图得到正确的结果。

1.初始化环境
1)准备物化视图基表
create table t (x int, y int,z int);
insert into t values (1,1,1);
insert into t values (2,2,2);
insert into t values (3,3,3);
insert into t values (4,4,4);
insert into t values (5,5,5);
insert into t values (6,6,6);
insert into t values (6,6,6);
commit;
sec@ora10g> select * from t;

         X          Y          Z
---------- ---------- ----------
         1          1          1
         2          2          2
         3          3          3
         4          4          4
         5          5          5
         6          6          6
         6          6          6

7 rows selected.

2)创建物化视图日志
注:包含所有字段
sec@ora10g> create materialized view log on t with sequence, rowid (x,y,z) including new values;

Materialized view log created.

3)创建物化视图
sec@ora10g> create materialized view mv_t build immediate refresh fast on commit enable query rewrite as select x,y,z,count(*) from t group by x,y,z;

Materialized view created.

sec@ora10g> select * from mv_t;

         X          Y          Z   COUNT(*)
---------- ---------- ---------- ----------
         1          1          1          1
         2          2          2          1
         3          3          3          1
         4          4          4          1
         5          5          5          1
         6          6          6          2

6 rows selected.

2.物化视图查询重写测试
1)启用查询重写功能(默认)
sec@ora10g> show parameter query_rewrite_enabled

NAME                  TYPE   VALUE
--------------------- ------ -----------------
query_rewrite_enabled string TRUE
sec@ora10g> alter system set query_rewrite_enabled=TRUE;

System altered.

sec@ora10g> set autotrace on
sec@ora10g> select x,y,z,count(*) from t group by x,y,z;

         X          Y          Z   COUNT(*)
---------- ---------- ---------- ----------
         1          1          1          1
         2          2          2          1
         3          3          3          1
         4          4          4          1
         5          5          5          1
         6          6          6          2

6 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 1712400360

-------------------------------------------------------------------------------------
| Id  | Operation                    | Name | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |      |     6 |   312 |     3   (0)| 00:00:01 |
|   1 |  MAT_VIEW REWRITE ACCESS FULL| MV_T |     6 |   312 |     3   (0)| 00:00:01 |
-------------------------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          4  consistent gets
          0  physical reads
          0  redo size
        677  bytes sent via SQL*Net to client
        381  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          6  rows processed

从执行计划上可以看很清晰的看到这个查询重新的过程,我们对T表进行查询,Oracle此时发现可以通过物化视图MV_T直接返回我们需要的结果,因此最终智慧的决定通过检索物化视图来返回最后结果。

2)停用查询重写功能
sec@ora10g> alter system set query_rewrite_enabled=FALSE;

System altered.

sec@ora10g> show parameter query_rewrite_enabled

NAME                  TYPE   VALUE
--------------------- ------ -----------------
query_rewrite_enabled string FALSE

sec@ora10g> set autotrace on
sec@ora10g> select x,y,z,count(*) from t group by x,y,z;

         X          Y          Z   COUNT(*)
---------- ---------- ---------- ----------
         4          4          4          1
         3          3          3          1
         6          6          6          2
         1          1          1          1
         5          5          5          1
         2          2          2          1

6 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 47235625

---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     7 |   273 |     4  (25)| 00:00:01 |
|   1 |  HASH GROUP BY     |      |     7 |   273 |     4  (25)| 00:00:01 |
|   2 |   TABLE ACCESS FULL| T    |     7 |   273 |     3   (0)| 00:00:01 |
---------------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement


Statistics
----------------------------------------------------------
          5  recursive calls
          0  db block gets
         15  consistent gets
          0  physical reads
          0  redo size
        680  bytes sent via SQL*Net to client
        381  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          6  rows processed

当停用查询重写功能后,查询结果将只能通过T表进行返回。

3.小结
  当满足物化视图查询重写的条条框框后,我们便实现了高效、灵活地检索数据的目的。Oracle在CBO优化模式下带给我们很多新奇的体验。

标签:00,重写,视图,查询,MV,----------,物化,ora10g
From: https://www.cnblogs.com/ivenlin/p/18111174

相关文章

  • MVCC多版本并发控制
    MVCC(MultiversionConcurrencyControl)中文全程叫多版本并发控制,是现代数据库(包括MySQL、Oracle、PostgreSQL等)引擎实现中常用的处理读写冲突的手段,目的在于提高数据库高并发场景下的吞吐性能。一、undolog我们在进行数据更新操作的时候,不仅会记录redolog日志,而且也会记......
  • 搜索Maven相关依赖jar包(特别推荐)https://mvnrepository.com/
    搜索Maven相关依赖jar包(特别推荐)https://mvnrepository.com/根据maven查询jar包的步骤如下:打开Maven仓库中央库的网站https://mvnrepository.com/在搜索框中输入你需要查询的jar包的名称,例如:hutool-all点击搜索按钮,网站会列出所有符合条件的jar包信息,包括版本号、最近更新时间......
  • Servlet通常如何通过重写父类HttpServlet的doGet()、doPost()等方法来处理不同类型的H
    Servlet在JavaWeb应用程序中用于处理HTTP请求。javax.servlet.http.HttpServlet是一个抽象类,它提供了处理HTTP请求的标准机制。当您创建一个Servlet并让它继承自HttpServlet时,您可以重写其中的doGet()和doPost()方法以便分别处理GET和POST类型的HTTP请求。以下是Servlet处......
  • 阿里最新HomView-MOT技术:UAV动态场景下的多目标跟踪
    来源:3D视觉工坊添加小助理:dddvision,备注:方向+学校/公司+昵称,拉你入群。文末附行业细分群扫描下方二维码,加入3D视觉知识星球,星球内凝聚了众多3D视觉实战问题,以及各个模块的学习资料:近20门视频课程(星球成员免费学习)、最新顶会论文、计算机视觉书籍、优质3D视觉算法源码等。想要......
  • C#中的MVVM
    MVVM(Model-View-ViewModel)是一种设计模式,通常与WPF(WindowsPresentationFoundation)和Xamarin等框架结合使用,用于构建基于XAML的应用程序。MVVM是MVC模式的衍生,旨在进一步分离应用程序的逻辑和界面。以下是MVVM的知识点以及可能会在面试中被问到的一些问题和答案:MVVM的......
  • C#中的MVC
    当谈到MVC(Model-View-Controller)时,我们在软件开发中通常指的是一种设计模式,它将应用程序分为三个主要组成部分:模型(Model)、视图(View)和控制器(Controller)。这种分层结构有助于组织代码,使其更易于理解、维护和扩展。下面是对MVC中每个组成部分的详细介绍:模型(Model):模型代表应......
  • [附源码]计算机毕业设计电影播放器开发与设计(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图项目介绍随着数字媒体技术的发展,电影播放器已成为人们日常生活中不可或缺的娱乐工具。一个功能丰富的电影播放器不仅需要支持各种视频格式、提供高清流畅的播放体验,还应......
  • [附源码]计算机毕业设计在线直播管理系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图项目介绍在线直播管理系统,帮我写150字的选题背景的内容随着互联网技术的飞速发展,在线直播已成为新兴的媒体传播方式,尤其在娱乐、教育、电商等领域得到广泛应用。一个高......
  • [附源码]计算机毕业设计基于ssm的会议室预约系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图项目介绍基于SSM(Spring,SpringMVC,MyBatis)框架的会议室预约系统,旨在通过现代化的信息技术手段解决企业和机构中会议室资源分配和使用的问题。随着企业规模的扩大和办......
  • [附源码]计算机毕业设计高校多媒体教室预约系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图项目介绍随着信息技术在教育领域的广泛应用,多媒体教室成为高校教学资源的重要组成部分。合理高效的预约管理系统对于充分利用多媒体教室资源、提高教学质量和效率具有显......