WEB开发网
开发学院数据库DB2 DB2 中 MQT 的匹配原理及使用技巧 阅读

DB2 中 MQT 的匹配原理及使用技巧

 2010-03-31 00:00:00 来源:WEB开发网   
核心提示: 根据上面介绍的原理,以下 6 种查询可以利用 MQT 来提高性能,DB2 中 MQT 的匹配原理及使用技巧(2),本文将针对每种查询举例加以介绍:MQT 能够精确匹配查询;查询结果集是 MQT 的子集;查询中连接的表数目多于 MQT;查询中连接的表是 MQT 中表的子集,需满足引用完整性 (Re

根据上面介绍的原理,以下 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; 

上一页  1 2 3 4 5 6 7  下一页

Tags:DB MQT 匹配

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接