MQT :物化查询表。是以一次查询的结果为基础  定义创建的表(实表),以量取胜(特别是在百万,千万级别的量,效果更显著),可以更快的查询到我们需要的结果。MQT有两种类型,一种是系统维护的MQT ,一种是用户维护的MQT。本处是基于系统维护的MQT展开解析。

  对于系统维护的MQT,这么和基表操作的数据更新。通过两种刷新机制:一种是即时刷新  refresh immediate ,另一种是延迟更新 refresh deferred 。

  所谓的即时更新,就是当基表进行CRUD(增删改查)的操作时,对应的MQT表数据也会进行相应的刷新,这样的优点是能够保证MQT中的数据中是最新的,但是由于对基表进行操作的同时还要维护MQT表,负载有所增加。

  使用延迟更新,当对基表进行操作的时候,MQT中的数据没有进行刷新,而是等到用户(DBA)阶段性的执行刷新命令(refresh table MQT_table)时才会进行刷新。这种方式适合用在绝大部分时间都是只读的应用系统中,或者数据的更新只发生维护窗口时间。

  MQT刷新的方式还可以从数据的刷新范围进行分类,一是完全刷新,二是增量刷新。完全刷新是将基表中的所有数据重新进行计算和处理从而更新MQT数据。这种方式的缺点是当基表数据量大而且MQT定义复杂的时候,刷新过程会比较慢。增量更新方式是针对CRUD等操作更新过的数据的那一部分数据,对MQT中相应的数据进行刷新,而不需要访问及表中的所有数据。

  结合起来,即时更新方式就是增量刷新方式,延迟刷新方式采用的是完全刷新,除了一种特殊的延迟刷新--->staging table 的延迟更新。当MQT的基表被修改时,变化就会传播进来,添加到staging table中,这样就利用staging table做增量刷新。当刷新操作完成时,staging table中的数据就会被删除。

即时刷新:

创建DB ,创建table

  db2start

  db2 => create db mydb
  DB20000I CREATE DATABASE 命令成功完成。
  db2 => connect to mydb

  数据库连接信息

  数据库服务器 = DB2/NT64 10.5.5
  SQL 授权标识 = JOINT
  本地数据库别名 = MYDB

  db2 => create table dbtable(id int not null primary key,c int,d int,e int)
  DB20000I SQL 命令成功完成。
  db2 => insert into dbtable values(1,1,1,1),(2,2,2,2),(3,3,3,3),(4,4,4,4),(5,5,5,5)
  DB20000I SQL 命令成功完成。
  db2 => select * from dbtable

  ID C D E
----------- ----------- ----------- -----------
  1 1 1 1
  2 2 2 2
  3 3 3 3
  4 4 4 4
  5 5 5 5

  5 条记录已选择。

  db2 => insert into dbtable values(11,11,11,11),(12,12,12,12),(13,13,13,13),(14,14,41,41),(15,15,51,51)
  DB20000I SQL 命令成功完成。
  db2 => select * from dbtable

  ID C D E
----------- ----------- ----------- -----------
  1 1 1 1
  2 2 2 2
  3 3 3 3
  4 4 4 4
  5 5 5 5
  11 11 11 11
  12 12 12 12
  13 13 13 13
  14 14 41 41
  15 15 51 51

  10 条记录已选择。

  创建MQT

  db2 => create table mqttab as (select id,c,d,e from dbtable where id > 10) data initially deferred refresh immediate
  DB20000I SQL 命令成功完成。

  当前创建完毕之后,表里面还没有数据,查询为空。在操作一个基表

  db2 => insert into dbtable values(111,111,111,11)

  再次查询MQT 表就有数据了

  db2 => select * from mqttab

  ID C D E
----------- ----------- ----------- -----------
  11 11 11 11
  12 12 12 12
  13 13 13 13
  14 14 41 41
  15 15 51 51
  111 111 111 11

  6 条记录已选择。

  db2 => insert into dbtable values(121,222,222,1)
  DB20000I SQL 命令成功完成。
  db2 => select * from mqttab

  ID C D E
----------- ----------- ----------- -----------
  11 11 11 11
  12 12 12 12
  13 13 13 13
  14 14 41 41
  15 15 51 51
  111 111 111 11
  121 222 222 1

  7 条记录已选择。

  这就的即时的刷新。基表操作更新,MQT表即时进行更新。一下子操作两个表,负荷量较大。

延迟刷新

  创建table

  db2 => create table dbtable1(id int not null primary key,c int,d int,e int)
  DB20000I SQL 命令成功完成。
  db2 => insert into dbtable1 values(1,1,1,1),(2,2,2,2),(3,3,3,3),(4,4,4,4),(5,5,5,5)
  DB20000I SQL 命令成功完成。
  db2 => create table mqttab1 as (select id,c,d,e from dbtable1 where id > 10) data initially deferred refresh deferred
  DB20000I SQL 命令成功完成。

  创建完毕,插入基表数据。

  db2 => insert into dbtable1 values(111,111,11,111)

  mqt查询为空。

  db2 => select * from mqttab1

  ID C D E
----------- ----------- ----------- -----------

  延迟刷新命令:

  db2 => refresh table mqttabl
  DB20000I SQL 命令成功完成。
  db2 => select * from mqttabl

  ID C D E
----------- ----------- ----------- -----------
  111 111 11 111

  1 条记录已选择。

就即时刷新和延迟刷新做了一个实例。不足请提出,共同进步!谢谢

DB2中的MQT优化机制详解和实践的更多相关文章

  1. Java中String对象创建机制详解()

    一String 使用 private final char value来实现字符串存储 二Java中String的创建方法四种 三在深入了解String创建机制之前要先了解一个重要概念常量池Const ...

  2. JS中的函数节流throttle详解和优化

    JS中的函数节流throttle详解和优化在前端开发中,有时会为页面绑定resize事件,或者为一个页面元素绑定拖拽事件(mousemove),这种事件有一个特点,在一个正常的操作中,有可能在一个短的 ...

  3. 浏览器 HTTP 协议缓存机制详解

    最近在准备优化日志请求时遇到了一些令人疑惑的问题,比如为什么响应头里出现了两个 cache control.为什么明明设置了 no cache 却还是发请求,为什么多次访问时有时请求里带了 etag, ...

  4. JVM的垃圾回收机制详解和调优

    JVM的垃圾回收机制详解和调优 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都 ...

  5. 转 Java虚拟机5:Java垃圾回收(GC)机制详解

    转 Java虚拟机5:Java垃圾回收(GC)机制详解 Java虚拟机5:Java垃圾回收(GC)机制详解 哪些内存需要回收? 哪些内存需要回收是垃圾回收机制第一个要考虑的问题,所谓“要回收的垃圾”无 ...

  6. [ 转载 ] Java开发中的23种设计模式详解(转)

    Java开发中的23种设计模式详解(转)   设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类 ...

  7. java面试题之----JVM架构和GC垃圾回收机制详解

    JVM架构和GC垃圾回收机制详解 jvm,jre,jdk三者之间的关系 JRE (Java Run Environment):JRE包含了java底层的类库,该类库是由c/c++编写实现的 JDK ( ...

  8. Android应用AsyncTask处理机制详解及源码分析

    1 背景 Android异步处理机制一直都是Android的一个核心,也是应用工程师面试的一个知识点.前面我们分析了Handler异步机制原理(不了解的可以阅读我的<Android异步消息处理机 ...

  9. 浏览器 HTTP 协议缓存机制详解--网络缓存决策机制流程图

    1.缓存的分类 2.浏览器缓存机制详解 2.1 HTML Meta标签控制缓存 2.2 HTTP头信息控制缓存 2.2.1 浏览器请求流程 2.2.2 几个重要概念解释 3.用户行为与缓存 4.Ref ...

随机推荐

  1. 【钢琴伴奏基本形态和伴奏织体】技能 get

    开头重复一句话:做编曲就是设计和声+伴奏织体. ---- --------- --------------- 分解和弦: 半分解和弦: 做法:在旋律的下方演奏一些和弦的音.就能让音乐更加的饱满,拒绝空 ...

  2. java架构之路-(SpringMVC篇)SpringMVC主要流程源码解析(下)注解配置,统一错误处理和拦截器

    我们上次大致说完了执行流程,也只是说了大致的过程,还有中间会出错的情况我们来处理一下. 统一异常处理 比如我们的运行时异常的500错误.我们来自定义一个类 package com.springmvcb ...

  3. 学习WEBAPI(DOM)第二天

    目录 第二天学习目标: 一.阻止超链接的默认跳转行为 二.鼠标进入事件和鼠标离开事件 三.根据name属性值获取元素==>表单标签,返回的是伪数组 四.根据类样式的名字来获取元素,返回的是伪数组 ...

  4. Drill 学习笔记之 入门体验

    简介: Apache Drill是一个低延迟的分布式海量数据(涵盖结构化.半结构化以及嵌套数据)交互式查询引擎.分布式.无模式(schema-free) 是Google Dremel的开源实现,本质是 ...

  5. Flume 学习笔记之 Flume NG概述及单节点安装

    Flume NG概述: Flume NG是一个分布式,高可用,可靠的系统,它能将不同的海量数据收集,移动并存储到一个数据存储系统中.轻量,配置简单,适用于各种日志收集,并支持 Failover和负载均 ...

  6. Android 横竖屏切换生命周期

    默认情况下,屏幕会旋转并且会重新走生命周期. 1. 屏幕不旋转   在AndroidManifest文件中的对应Activity中配置android:screenOrientation=”landsc ...

  7. SQL SERVER数据库基本语法汇总,仅代表个人整理,仅供参考

    以下SQL基本语法皆由本人整理,以下做一个汇总,关于游标,可作为了解,不要求掌握,其他查询.修改.删除操作等基本语法必须会使用.select * from [dbo].[TBICJE]select m ...

  8. 从零起步 系统入门Python爬虫工程师 ✌✌

    从零起步 系统入门Python爬虫工程师 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 大数据时代,python爬虫工程师人才猛增,本课程专为爬虫工程师打造, ...

  9. 上传漏洞之常见MIME类型

    常见的MIME类型 超文本标记语言文本 .html,.html text/html 普通文本 .txt text/plain RTF文本 .rtf application/rtf GIF图形 .gif ...

  10. Python3的编码整理总结

    python3在内存中是用unicode编码方式存储的,所以不能直接储存和传输,要转化为其他编码进行储存和传输. 字符串通过编码转换成字节码,字节码通过解码成为字符串 encode:str --> ...