DB2 中 MQT 的匹配原理及使用技巧
2010-03-31 00:00:00 来源:WEB开发网根据上面介绍的原理,以下 6 种查询可以利用 MQT 来提高性能。本文将针对每种查询举例加以介绍:
MQT 能够精确匹配查询;
查询结果集是 MQT 的子集;
查询中连接的表数目多于 MQT;
查询中连接的表是 MQT 中表的子集,需满足引用完整性 (Reference Integrity, RI);
查询中包含 MQT 中不存在的列,需满足功能依赖;
查询对应的聚集级别 (aggregation level) 高于 MQT。
为了对上面的 6 种情况进行详细介绍,先创建一些示例表以方便通过实例来阐述这些原理。如清单 1 所示,表 Product 和 Customer 是维表 (dimension table),且分别定义了唯一键;表 Sales 是事实表 (fact table),它通过 PROD_ID 和 CUST_ID 的外键约束来保证引用完整性。至于表 Product 上定义的函数依赖 (Functional Dependency),我们将在后面详细讨论。另外,在实验的过程中人为的设置了基本表和 MQT 表的统计信息,使得编译器在选择查询计划总认为使用 MQT 的代价低。这并不影响 MQT 匹配的过程,而且简化了讨论。
清单 1. 创建示例中的表
CREATE TABLE MQTSCH.PRODUCT(PROD_ID INT NOT NULL UNIQUE,
PROD_DESC VARCHAR(64),
CAT_ID INT NOT NULL, CAT_DESC VARCHAR(64),
GROUP_ID INT NOT NULL, GROUP_DESC VARCHAR(64),
CONSTRAINT FD1 CHECK
(CAT_DESC DETERMINED BY CAT_ID)
NOT ENFORCED ENABLE QUERY OPTIMIZATION,
CONSTRAINT FD2 CHECK
(GROUP_ID DETERMINED BY CAT_ID)
NOT ENFORCED ENABLE QUERY OPTIMIZATION
);
CREATE TABLE MQTSCH.CUSTOMER(CUST_ID INT NOT NULL UNIQUE,
CUST_NAME VARCHAR(50),
CUST_ADDRESS VARCHAR(100));
CREATE TABLE MQTSCH.SALES(PROD_ID INT NOT NULL REFERENCES MQTSCH.PRODUCT(PROD_ID),
CUST_ID INT NOT NULL REFERENCES MQTSCH.CUSTOMER(CUST_ID),
SALE_DATE DATE NOT NULL,
AMOUNT DECIMAL(9,2) NOT NULL);
runstats on table MQTSCH.CUSTOMER;
runstats on table MQTSCH.PRODUCT;
runstats on table MQTSCH.SALES;
update syscat.tables set card=20 where tabname='CUSTOMER';
update syscat.tables set card=200 where tabname='PRODUCT';
update syscat.tables set card=2000 where tabname='SALES';
set current refresh age=any;
- ››db2 对float类型取char后显示科学计数法
- ››DB2中出现SQL1032N错误现象时的解决办法
- ››DB2 锁升级示例
- ››db2诊断系列之---定位锁等待问题
- ››db2 命令选项解释
- ››DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 基础: 表空间和缓冲池
- ››DB2 XML 编程,第 1 部分: 理解 XML 数据模型
- ››DB2 pureScale 实战
更多精彩
赞助商链接