DB2中的MQT优化机制详解和实践
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优化机制详解和实践的更多相关文章
- Java中String对象创建机制详解()
一String 使用 private final char value来实现字符串存储 二Java中String的创建方法四种 三在深入了解String创建机制之前要先了解一个重要概念常量池Const ...
- JS中的函数节流throttle详解和优化
JS中的函数节流throttle详解和优化在前端开发中,有时会为页面绑定resize事件,或者为一个页面元素绑定拖拽事件(mousemove),这种事件有一个特点,在一个正常的操作中,有可能在一个短的 ...
- 浏览器 HTTP 协议缓存机制详解
最近在准备优化日志请求时遇到了一些令人疑惑的问题,比如为什么响应头里出现了两个 cache control.为什么明明设置了 no cache 却还是发请求,为什么多次访问时有时请求里带了 etag, ...
- JVM的垃圾回收机制详解和调优
JVM的垃圾回收机制详解和调优 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都 ...
- 转 Java虚拟机5:Java垃圾回收(GC)机制详解
转 Java虚拟机5:Java垃圾回收(GC)机制详解 Java虚拟机5:Java垃圾回收(GC)机制详解 哪些内存需要回收? 哪些内存需要回收是垃圾回收机制第一个要考虑的问题,所谓“要回收的垃圾”无 ...
- [ 转载 ] Java开发中的23种设计模式详解(转)
Java开发中的23种设计模式详解(转) 设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类 ...
- java面试题之----JVM架构和GC垃圾回收机制详解
JVM架构和GC垃圾回收机制详解 jvm,jre,jdk三者之间的关系 JRE (Java Run Environment):JRE包含了java底层的类库,该类库是由c/c++编写实现的 JDK ( ...
- Android应用AsyncTask处理机制详解及源码分析
1 背景 Android异步处理机制一直都是Android的一个核心,也是应用工程师面试的一个知识点.前面我们分析了Handler异步机制原理(不了解的可以阅读我的<Android异步消息处理机 ...
- 浏览器 HTTP 协议缓存机制详解--网络缓存决策机制流程图
1.缓存的分类 2.浏览器缓存机制详解 2.1 HTML Meta标签控制缓存 2.2 HTTP头信息控制缓存 2.2.1 浏览器请求流程 2.2.2 几个重要概念解释 3.用户行为与缓存 4.Ref ...
随机推荐
- EF Core 实现读写分离的最佳方案
前言 公司之前使用Ado.net和Dapper进行数据访问层的操作, 进行读写分离也比较简单, 只要使用对应的数据库连接字符串即可. 而最近要迁移到新系统中,新系统使用.net core和EF Cor ...
- Spring Security 前后端分离登录,非法请求直接返回 JSON
hello 各位小伙伴,国庆节终于过完啦,松哥也回来啦,今天开始咱们继续发干货! 关于 Spring Security,松哥之前发过多篇文章和大家聊聊这个安全框架的使用: 手把手带你入门 Spring ...
- [Machine Learning] Linear regression
1. Variable definitions m : training examples' count \(y\) : \(X\) : design matrix. each row of \(X\ ...
- MongoDB 学习笔记之 删除数据,集合,数据库
删除数据,集合,数据库: 删除一个文档: db.media.deleteOne({"name": "Sky"}) 删除多个文档: db.media.delete ...
- Rust入坑指南:坑主驾到
欢迎大家和我一起入坑Rust,以后我就是坑主,我主要负责在前面挖坑,各位可以在上面看,有手痒的也可以和我一起挖.这个坑到底有多深?我也不知道,我是抱着有多深就挖多深的心态来的,下面我先跳了,各位请随意 ...
- cocos2d-x Windows 环境搭建
本文cocos2d-x版本为3.14,3之后的版本差别不会很大 Python环境 由于需要用到几个.py文件建立工程,我们要先设置好python2.x的环境 python官网下载,在找到2.x的版本的 ...
- Mariadb 基于Mycat实现读写分离
环境:Mariadb主:192.168.200.129 Mariadb从:192.168.200.114 Mycat :192.168.200.112 (1) 安装jdk,先查看本机是 ...
- PHP中sha1()函数和md5()函数的绕过
相信大家都知道,sha1函数和md5都是哈希编码的一种,在PHP中,这两种编码是存在绕过漏洞的. PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值 ...
- DataStructure之线性表以及其实现
线性表 应用:多项式的表示 什么是线性表 多项式表示问题给出的启示: 同一个问题可以有不同的表示(存储)方法 有一类共性问题 : 有序线性序列的租住和管理 “线性表(Linear List)” : 由 ...
- 微信小程序中事件
微信小程序中事件 一.常见的事件有 类型 触发条件 最低版本 touchstart 手指触摸动作开始 touchmove 手指触摸后移动 touchcancel 手指触摸动作被打断,如来电提醒,弹窗 ...