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. EF Core 实现读写分离的最佳方案

    前言 公司之前使用Ado.net和Dapper进行数据访问层的操作, 进行读写分离也比较简单, 只要使用对应的数据库连接字符串即可. 而最近要迁移到新系统中,新系统使用.net core和EF Cor ...

  2. Spring Security 前后端分离登录,非法请求直接返回 JSON

    hello 各位小伙伴,国庆节终于过完啦,松哥也回来啦,今天开始咱们继续发干货! 关于 Spring Security,松哥之前发过多篇文章和大家聊聊这个安全框架的使用: 手把手带你入门 Spring ...

  3. [Machine Learning] Linear regression

    1. Variable definitions m : training examples' count \(y\) : \(X\) : design matrix. each row of \(X\ ...

  4. MongoDB 学习笔记之 删除数据,集合,数据库

    删除数据,集合,数据库: 删除一个文档: db.media.deleteOne({"name": "Sky"}) 删除多个文档: db.media.delete ...

  5. Rust入坑指南:坑主驾到

    欢迎大家和我一起入坑Rust,以后我就是坑主,我主要负责在前面挖坑,各位可以在上面看,有手痒的也可以和我一起挖.这个坑到底有多深?我也不知道,我是抱着有多深就挖多深的心态来的,下面我先跳了,各位请随意 ...

  6. cocos2d-x Windows 环境搭建

    本文cocos2d-x版本为3.14,3之后的版本差别不会很大 Python环境 由于需要用到几个.py文件建立工程,我们要先设置好python2.x的环境 python官网下载,在找到2.x的版本的 ...

  7. Mariadb 基于Mycat实现读写分离

    环境:Mariadb主:192.168.200.129 Mariadb从:192.168.200.114 Mycat    :192.168.200.112 (1)      安装jdk,先查看本机是 ...

  8. PHP中sha1()函数和md5()函数的绕过

    相信大家都知道,sha1函数和md5都是哈希编码的一种,在PHP中,这两种编码是存在绕过漏洞的. PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值 ...

  9. DataStructure之线性表以及其实现

    线性表 应用:多项式的表示 什么是线性表 多项式表示问题给出的启示: 同一个问题可以有不同的表示(存储)方法 有一类共性问题 : 有序线性序列的租住和管理 “线性表(Linear List)” : 由 ...

  10. 微信小程序中事件

    微信小程序中事件 一.常见的事件有 类型 触发条件 最低版本 touchstart 手指触摸动作开始 touchmove 手指触摸后移动 touchcancel 手指触摸动作被打断,如来电提醒,弹窗 ...