本文主要讨论可以使决策支持系统(DSS)中的大型查询高效地执行的一些方法。这些查询通常都是访问较多数据的单纯 select 查询。下面是我们要讨论的一些方法:
- 建立适当的参照完整性约束
- 使用物化查询表(MQT)将表复制到其它数据库分区,以允许非分区键列上的合并连接
- 使用多维集群(MDC)
- 使用表分区(DB2® 9 的新功能)
- 结合使用表分区和多维集群
- 使用 MQT 预先计算聚合结果
本文中的例子针对 Windows 平台上运行的 DB2 9。但是,其中的概念和信息对于任何平台都是有用的。由于大多数商业智能(BI)环境都使用 DB2 Database Partitioning Feature(DPF,DB2 数据库分区特性),我们的例子也使用 DPF 将数据划分到多个物理和逻辑分区之中。
数据库布局和设置
本节描述用于在我们的系统上执行测试的数据库的物理和逻辑布局。
星型模式布局
本文使用如下所示的星型模式:
清单 1. 星型模式
| PRODUCT_DIM DATE_DIM \ / \ / SALES_FACT | | STORE_DIM |
其中的表的定义如下:
| 表名 | 类型 | 列名 | 数据类型 | 列描述 |
| SALES_FACT | FACT TABLE | DATE_ID | DATE | 产品售出日期 |
| PRODUCT_ID | INT | 所购买产品的标识符 | ||
| STORE_ID | INT | 出售产品的商店的标识符 | ||
| QUANTITY | INT | 这次交易中售出产品的数量 | ||
| PRICE | INT | 产品购买价格。[为了简单起见,该字段为整型,但是使用小数型更符合实际] | ||
| TRANSACTION_DETAILS | CHAR(100) | 关于此次交易的描述/详细信息 | ||
| DATE_DIM | DIMENSION TABLE | DATE_ID NOT NULL | DATE | 惟一标识符 |
| MONTH | INT | 日期记录所属的月份 | ||
| QUARTER | INT | 日期记录所属的季度(第 1、第 2、第 3 或第 4 季度) | ||
| YEAR | INT | 日期记录所属的年份 | ||
| PRODUCT_DIM | DIMENSION TABLE | PRODUCT_ID NOT NULL | INT | 产品惟一标识符 |
| PRODUCT_DESC | CHAR(20) | 对产品的描述 | ||
| MODEL | CHAR(200) | 产品型号 | ||
| MAKE | CHAR(50) | 产品的质地 | ||
| STORE_DIM | DIMENSION TABLE | STORE_ID NOT NULL | INT | 商店惟一标识符 |
| LOCATION | CHAR(15) | 商店位置 | ||
| DISTRICT | CHAR(15) | 商店所属街区 | ||
| REGION | CHAR(15) | 商店所属区域 |
事实表 SALES_FACT 包含 2006 年的总体销售信息。它包括产品售出日期、产品 ID、销售该产品的商店的 ID、售出的特定产品的数量,以及产品的价格。事实表中还添加了 TRANSACTION_DETAILS 列,以便在从事实表中访问数据时生成更多的 I/O。
- 维度表 DATE_DIM 包含商店开放期间的惟一的日期和相应的月份、季度和年份信息。
- 维度表 PRODUCT_DIM 包含公司所销售的不同产品。每种产品有一个惟一的产品 ID 和一个产品描述、型号以及质地。
- 维度表 STORE_DIM 包含不同的商店 ID 和商店的位置、所属街区以及所属区域等信息。
