许多数据仓库数据库都使用星型模式,该模式由一个事实表和许多维表组成。使用星型模式或雪花模式中的表的查询可以从对事实表的适当索引中获益。
事实表通常很大,包含有关主题的定量或真实信息。 维表则描述事实表的属性。
当某个维需要较低级别的信息时,会使用称为雪花模式的表层次结构来对该维建模。
请考虑星型模式的示例,该星型模式带有 一个事实表,名为 orders,和四个维表,名为 customers、suppliers、products 和 clerks。orders 表描述每份销售订单的详细信息,包括客户标识、供应商标识、产品标识和销售员标识。每个维表均详细描述了一个标识。orders 表较大,而四个维表较小。
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 数据库设计和实现指南》。