数据仓库应用程序的索引

许多数据仓库数据库都使用星型模式,该模式由一个事实表和许多表组成。使用星型模式或雪花模式中的表的查询可以从对事实表的适当索引中获益。

事实表通常很大,包含有关主题的定量或真实信息。 维表则描述事实表的属性。

当某个维需要较低级别的信息时,会使用称为雪花模式的表层次结构来对该维建模。

请考虑星型模式的示例,该星型模式带有 一个事实表,名为 orders,和四个维表,名为 customerssuppliersproductsclerksorders 表描述每份销售订单的详细信息,包括客户标识、供应商标识、产品标识和销售员标识。每个维表均详细描述了一个标识。orders 表较大,而四个维表较小。

以下查询可查找供应商 Johnson 提供的硬盘在 Menlo Park 地区(邮政编码为 94025)的总直接销售收入:
SELECT sum(orders.price)
FROM orders, customers, suppliers,product,clerks
WHERE orders.custid = customers.custid 
      AND customers.zipcode = 94025
      AND orders.suppid = suppliers.suppid
      AND suppliers.name = 'Johnson'
      AND orders.prodid = product.prodid
      AND product.type = 'hard drive'
      AND orders.clerkid = clerks.clerkid
      AND clerks.dept = 'Direct Sales'

该查询使用了典型的星型连接,其中事实表与所有维表通过外键进行连接。 每个维表都有一个选择性表过滤器。

星型连接的最优计划是对四个维表执行笛卡尔乘积,然后将结果与事实表连接起来。 以下对事实表的索引允许优化器选择最优查询计划:
CREATE INDEX ON orders(custid,suppid,prodid,clerkid)

如果没有此索引,优化器可能选择首先将事实表与单个维表进行连接,然后将其结果与剩余维表连接。最优计划能提供更好的性能。

有关星型模式和雪花模式的更多信息,请参阅《GBase 8s 数据库设计和实现指南》。